J’ai trouvé quelques réponses, mais elles semblent être spécifiquement liées aux machines Windows. Alors, ma question est la suivante: quelles sont les différences entre les tubes et les sockets, et quand / comment choisir l’un par rapport à l’autre?
Quelles sont les différences entre les tubes et les sockets, et quand / comment choisir l’un par rapport à l’autre?
Les pipes et les sockets gèrent les stream d’octets, mais ils le font de différentes manières …
Utilisation :
read()
et write()
sur un tube. BTW, vous pouvez utiliser netcat ou socat pour joindre un socket à un tube.
Pour compléter la réponse donnée par Mike, il est important de mentionner l’existence de sockets de domaine UNIX, disponibles sur tous les systèmes d’exploitation compatibles POSIX. Bien que très similaires aux sockets internet “normaux” en termes de sémantique d’utilisation, ils sont purement locaux à la machine (bien entendu, les sockets Internet peuvent également fonctionner localement) et se comportent donc presque comme un tube. Presque, car un tube UNIX est par définition unidirectionnel:
Les tuyaux et les FIFO (également appelés canaux nommés) fournissent un canal de communication interprocessus unidirectionnel. Une pipe a une fin de lecture et une fin d’écriture. Les données écrites à l’extrémité écriture d’un canal peuvent être lues à partir de l’extrémité lecture du canal. (extrait de la page de man pipe (7) )
Les sockets de domaine UNIX ont également une fonctionnalité très inhabituelle, car outre les données, elles permettent également d’envoyer des descripteurs de fichiers : de cette manière, un processus non privilégié peut accéder à tout fichier dont le descripteur a été envoyé sur le socket. Selon Wikipedia, cette technique est utilisée par le démon d’parsing antivirus ClamAV.