Sé que hay sockets con nombre y tubos con nombre (fifo) en Linux.
En ls -l
, se verían a continuación: (He cambiado los nombres de archivo, para demostración).
prw-r--r-- 1 root root 0 Nov 8 16:31 /tmp/fifo
srwxrwxrwx 1 root root 0 Nov 8 15:54 /tmp/socket
Ahora, se puede crear una tubería con nombre usando mkfifo
. ¿Hay un comando para crear un socket con nombre?
La última opción sería escribir un programa en C, que llamaría a la función mknod, pero quería saber si ya hay un comando para eso.
Lo que he intentado:
intenté buscar cualquier opción para mknod & mkfifo, pero no pude encontrar una.
NOTA: No estoy discutiendo sobre el modelo servidor-cliente a través de Ethernet / red. El archivo de socket con nombre será utilizado por 2 procesos en el mismo sistema.
Respuestas:
Un archivo de socket Unix / Linux es básicamente un FIFO bidireccional. Desde tomas fueron creados originalmente como una forma de gestionar las comunicaciones de red, es posible manipularlos utilizando las
send()
yrecv()
llamadas al sistema. Sin embargo, en el espíritu de Unix de "todo es un archivo", también puede usarwrite()
yread()
. Necesita usarsocketpair()
osocket()
crear sockets con nombre. Puede encontrar un tutorial para usar sockets en C aquí: Guía de Beej para Unix IPC: Unix Sockets .La
socat
utilidad de línea de comando es útil cuando quieres jugar con sockets sin escribir un programa "real". Es similarnetcat
y actúa como un adaptador entre diferentes redes e interfaces de archivo.Campo de golf:
socat
proyecto de casasocat
socat
fuente
socat
. Probablemente, cree un socket sin nombre, vincúlelo a localhost: some_port y luego use socat con ese puerto.socat
con nombre usando el comando UNIX-LISTEN, veaman socat
o este manual HTMLf1
:socat UNIX-LISTEN:f1 LISTEN:f2
.!!
Une las canalizaciones con nombre con (socat 1.x) o%
(socat 2.x), con la escritura de la tubería con nombre a la izquierda y la lectura de la tubería con nombre a la derecha. por ejemplosocat 'PIPE:/tmp/outstream!!PIPE:/tmp/instream' UNIX-CONNECT:/tmp/mysocket
Crea un socket rápidamente en python:
O con un pequeño programa en C , por ejemplo, guarde lo siguiente en
create-a-socket.c
:Luego instale gcc, compílelo y ta-da:
fuente
No existe una herramienta de línea de comando para crear sockets, ya que un socket siempre se conecta a un servidor que maneja las solicitudes enviadas a ese socket.
Entonces tendrá que escribir un servidor y dejar que eso cree el socket. Aquí hay un tutorial .
fuente
bind()
para conectarse"/home/beej/mysocket"