Je sais qu'il existe des sockets et des tubes nommés (fifo) dans Linux.
Dans ls -l
, ils ressembleraient à ce qui suit: (J'ai changé les noms de fichiers, par démonstration.)
prw-r--r-- 1 root root 0 Nov 8 16:31 /tmp/fifo
srwxrwxrwx 1 root root 0 Nov 8 15:54 /tmp/socket
Maintenant, un canal nommé peut être créé avec mkfifo
. Existe-t-il une commande pour créer un socket nommé?
La dernière option serait d'écrire un programme C, qui appellerait la fonction mknod, mais je voulais savoir s'il y avait déjà une commande pour cela.
Ce que j’ai essayé:
j’ai essayé de chercher des options pour mknod & mkfifo, mais je n’en ai pas trouvé.
REMARQUE: je ne discute pas du modèle serveur-client via Ethernet / réseau. Le fichier de socket nommé sera utilisé par 2 processus sur le même système.
Réponses:
Un fichier de socket Unix / Linux est fondamentalement une FIFO à deux voies. Les sockets ayant été créés à l'origine pour gérer les communications réseau, il est possible de les manipuler à l'aide des appels système
send()
etrecv()
. Cependant, dans l’esprit Unix de «tout est un fichier», vous pouvez également utiliserwrite()
etread()
. Vous devez utilisersocketpair()
ousocket()
créer des sockets nommés. Un tutoriel sur l’utilisation de sockets en C est disponible ici: Guide Beej d’Unix IPC: Unix Sockets .L'
socat
utilitaire de ligne de commande est utile lorsque vous voulez jouer avec des sockets sans écrire un "vrai" programme. Il est similaire ànetcat
et agit comme un adaptateur entre différentes interfaces de réseau et de fichier.Liens:
socat
maison de projetsocat
socat
la source
socat
. Probablement, créez une socket non nommée, associez-la à localhost: some_port & utilisez ensuite socat avec ce port?socat
la commande UNIX-LISTEN, voirman socat
ou ce manuel HTMLf1
:socat UNIX-LISTEN:f1 LISTEN:f2
.!!
(socat 1.x) ou%
(socat 2.x), avec l'écriture nommée tuyau à gauche et la lecture nommée tuyau à droite. par exemplesocat 'PIPE:/tmp/outstream!!PIPE:/tmp/instream' UNIX-CONNECT:/tmp/mysocket
Créez rapidement une socket en python:
Ou avec un petit programme C , par exemple, enregistrez ce qui suit dans
create-a-socket.c
:Puis installez gcc, compilez-le, et ta-da:
la source
Il n’existe aucun outil de ligne de commande permettant de créer des sockets puisqu’un socket est toujours connecté à un serveur qui gère les demandes envoyées à ce socket.
Vous devrez donc écrire un serveur et laisser cela créer le socket. Voici un tutoriel .
la source
bind()
pour se connecter à"/home/beej/mysocket"