web-dev-qa-db-fra.com

Quelle est la différence entre les tuyaux et les prises?

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?

52
bot_bot

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 ...

  • les canaux n'existent qu'au sein d'un hôte spécifique et font référence à la mise en mémoire tampon entre les fichiers virtuels ou à la connexion de la sortie/entrée des processus au sein de cet hôte. Il n'y a pas de concepts de paquets dans les canaux.
  • les sockets packetisent la communication en utilisant IPv4 ou IPv6; cette communication peut s'étendre au-delà de l'hôte local. Notez que différents points de terminaison d'un socket peuvent partager la même adresse IP; cependant, ils doivent écouter sur différents ports TCP/UDP pour ce faire.

Utilisation :

  • Utilisez des tuyaux:
    • lorsque vous souhaitez lire/écrire des données sous forme de fichier sur un serveur spécifique. Si vous utilisez C, vous read() et write() à un tuyau.
    • quand vous voulez connecter la sortie d'un processus à l'entrée d'un autre processus ... voir popen ()
  • Utilisez des sockets pour envoyer des données entre différents points de terminaison IPv4/IPv6. Très souvent, cela se produit entre différents hôtes, mais les sockets peuvent être utilisées au sein du même hôte

BTW, vous pouvez utiliser netcat ou socat pour joindre un socket à un tuyau.

67
Mike Pennington

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.

20
Ale