134 votes

socket de domaine unix VS canaux nommés?

Après avoir regardé un unix socket nommée et je pensais qu'ils étaient des canaux nommés. J'ai regardé le nom de tuyaux et ne voit pas beaucoup de différence. J'ai vu qu'ils ont été initialisés de manière différente, mais c'est la seule chose que je remarque. Les deux utilisent le C de lecture/écriture de fonction et de travail ressemblent autant que je sache.

Quel est la différence entre les sockets de domaine unix et des canaux nommés? Quand devrais-je choisir l'un plutôt que l'autre? Qui dois-je utiliser par défaut (comme la façon dont j'utilise l'utilisation de vecteur par défaut en C++ que d'utiliser deque, liste ou tout autre chose si j'ai des besoins)?

115voto

caf Points 114951

Les sockets de domaine UNIX sont généralement plus souples que les canaux nommés. Certains de leurs avantages sont les suivants:

  • Vous pouvez les utiliser pendant plus de deux procédés de la communication (par exemple. un processus de serveur avec potentiellement plusieurs processus client de la connexion);
  • Ils sont bidirectionnelles;
  • Ils ont en charge la transmission de noyau vérifié UID / GID informations d'identification entre les processus;
  • Ils ont en charge la transmission des descripteurs de fichiers entre les processus;
  • Ils soutiennent paquet et sequenced packet modes.

Pour utiliser ces fonctionnalités, vous devez utiliser l' send() / recv() de la famille des appels système plutôt que d' write() / read().

72voto

jtoberon Points 3928

Une différence est que les tubes nommés sont en sens unique, de sorte que vous aurez besoin d'utiliser deux d'entre eux dans le but de faire une communication à deux voies. Les Sockets sont bien sûr les deux sens. Il semble un peu plus compliqué à utiliser deux variables au lieu d'un seul (qui est, de deux tubes à la place de la douille).

Aussi, l'article de wikipedia est assez clair sur le point suivant: "les sockets de domaine Unix peut être créé que les flux d'octets ou de datagramme séquences, tandis que les tuyaux sont octet ruisseaux."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X