IPC vs chaussettes de domaine vs pipes nommées

Quelle est la différence entre les sockets de domaine IPC et Unix et les tubes nommés?

J’ai eu des définitions vagues de divers livres mais je ne pouvais pas savoir exactement lequel devrait être utilisé où.

Pratiquement tous les moyens de communication entre deux processus pourraient être considérés comme une forme de CPI.

Par exemple:

  1. Pipes sans nom (cat fichier.txt | grep foo) ou Pipes nommées
  2. Unix Domain Sockets
  3. Sockets TCP ou UDP
  4. Netlink Sockets sur Linux
  5. Divers mécanismes de mémoire partagée tels que les fichiers mappés en mémoire
  6. Transmission de messages haute vitesse telle que ZeroMQ

Comme qrdl l’a indiqué, les sockets du domaine UNIX et les canaux nommés sont deux mécanismes IPC.

Parmi ces deux canaux, les canaux nommés sont plus simples à utiliser, mais beaucoup moins flexibles que les sockets de domaine UNIX. Par exemple, si vous attendez potentiellement plus d’un processus de lecture pour chaque processus d’écriture, les sockets du domaine UNIX sont indispensables. si vous vous attendez à ce que le processus de lecture s’arrête et se lance pendant son exécution, vous aurez besoin de sockets de domaine UNIX.

IPC signifie Inter-Process Communications . Les sockets de domaine UNIX et les canaux nommés ne sont que deux mécanismes IPC, décrits dans Wikipedia:

  • Sockets de domaine Unix
  • Tuyaux nommés

Merci de vous concentrer sur la question, quelques fonctionnalités mises à jour:

Dans les sockets de domaine, la communication réelle (l’échange de données) n’utilise pas le système de fichiers, mais des tampons dans la mémoire du kernel. Par défaut, il s’agit du mode duplex intégral.

Les canaux nommés sont identifiés par leur point d’access, un fichier conservé sur le système de fichiers pour la gestion des données. Un canal nommé par défaut prend en charge les opérations de lecture et d’écriture bloquées. Cependant, il est possible de faire en sorte que les canaux nommés prennent en charge les opérations non bloquantes en spécifiant l’indicateur O_NONBLOCK lors de leur ouverture. Un canal nommé doit être ouvert en lecture seule ou en écriture seule. Il ne doit pas être ouvert en lecture-écriture car il s’agit d’un canal unidirectionnel semi-duplex.