J'ai trouvé quelques réponses, mais elles semblent concerner spécifiquement les machines Windows. Ma question est donc quelles sont les différences entre les tuyaux et les prises, et quand/comment devez-vous choisir l'un plutôt que l'autre?
quelles sont les différences entre les tuyaux et les prises, et quand/comment choisir l'un plutôt que l'autre?
Les canaux et les sockets gèrent les flux d'octets, mais ils le font de différentes manières ...
Utilisation :
read()
et write()
à un tuyau.BTW, vous pouvez utiliser netcat ou socat pour joindre un socket à un tuyau.
Pour compléter la réponse donnée par Mike, il est important de mentionner l'existence de sockets de domaine UNIX, disponibles sur tout système d'exploitation compatible POSIX. Bien que très similaires aux sockets Internet "normales" en termes de sémantique d'utilisation, elles sont purement locales à la machine (bien sûr, les sockets Internet peuvent également fonctionner localement), et se comportent donc presque comme un tuyau. Presque, car un canal UNIX est par définition unidirectionnel:
Les canaux et FIFO (également appelés canaux nommés) fournissent un canal de communication interprocessus unidirectionnel. Un tuyau a une extrémité de lecture et une extrémité d'écriture. Les données écrites à l'extrémité d'écriture d'un tuyau peuvent être lues à l'extrémité de lecture du tuyau. (extrait de la pipe de page de manuel (7) )
Les sockets de domaine UNIX ont également une fonctionnalité très inhabituelle, car en plus des données, ils permettent également d'envoyer des descripteurs de fichiers : de cette façon, un processus non privilégié peut accéder à tout fichier dont le descripteur a été envoyé sur le socket. Cette technique, selon Wikipedia, est utilisée par le démon d'analyse antivirus ClamAV.