Je passais en revue un ensemble de questions d’entrevue posées à un administrateur Unix; J'ai trouvé un sujet appelé "tube nommé".
J'ai googlé le sujet; dans une certaine mesure, j'ai pu le comprendre: - pipes nommées || FIFO
Mais j’ai quand même l’impression de ne pas savoir quand utiliser ce type de tuyau. Existe-t-il des situations spéciales dans lesquelles les tuyaux non nommés ne fonctionneraient pas?
Réponses:
Les pipes nommées (fifo) ont
quatretrois avantages auxquels je peux penser:ils sont bidirectionnels, les tuyaux sans nom peuvent être unidirectionnels*(Mise à jour, grâce aux commentaires de Stéphane Chazelas )
Une tâche immédiatement évidente que vous ne pouvez pas réaliser avec un canal non nommé est une application client / serveur conventionnelle.
Le dernier point (touché) ci-dessus concernant les canaux unidirectionnels est pertinent sous Linux. POSIX (voir
popen()
) indique qu'un canal doit uniquement être lisible ou inscriptible , sous Linux ils sont unidirectionnels . Voir Comprendre le noyau Linux (3e éd. O'Reilly) pour plus de détails sur Linux (p787). Les autres systèmes d’exploitation proposent des tuyaux bidirectionnels (non nommés).Par exemple, Nagios utilise un fifo pour son fichier de commandes . Divers processus externes (scripts CGI, contrôles externes, NRPE, etc.) écrivent des commandes / mises à jour dans ce fifo et celles-ci sont traitées par le processus persistant de Nagios.
Les canaux nommés ont des caractéristiques similaires aux connexions TCP, mais il existe des différences importantes. Etant donné qu'un fifo a un nom de système de fichiers persistant, vous pouvez y écrire même en l'absence de lecteur. Certes, les écritures seront bloquées (sans E / S asynchrone ni non bloquante), mais vous ne perdrez pas de données si le destinataire n'est pas connecté. démarré (ou en cours de redémarrage).
Pour référence, voir aussi les sockets de domaine Unix , et la réponse à cette question de Stackoverflow qui résume les principales méthodes IPC , et celle qui concerne
popen()
la source
Les canaux sans nom ou anonymes permettent de communiquer interprocessus un à un et unidirectionnel entre différents processus liés soit par une relation parent-enfant, soit par les enfants d'un parent commun fournissant le canal, tel qu'un shell processus. Étant donné que les processus sont liés, l'association de descripteurs de fichier au canal peut être implicite et ne nécessite pas d'objet avec un nom externe aux processus. Un canal non nommé existe uniquement tant que la procédure qui l'utilise maintient des descripteurs de fichier ouverts dans le canal. Lorsque les processus se terminent et que le système d'exploitation ferme tous les descripteurs de fichier associés aux processus, le canal non nommé est fermé.
Les tubes nommés sont en fait des FIFO. Ce sont des objets persistants représentés par des nœuds dans le système de fichiers. Un canal nommé fournit une communication bidirectionnelle plusieurs à plusieurs entre un ou plusieurs processus qui ne sont pas nécessairement liés et qui ne doivent pas nécessairement exister en même temps. Le nom de fichier du canal sert d’adresse ou de contrat entre les processus de communication. Si un seul processus écrit sur un canal nommé et qu'un autre processus lit à partir du canal nommé, le canal nommé se comporte de la même manière qu'un canal non nommé entre les deux processus liés.
La réponse courte est donc qu'il vous faut un canal nommé pour la communication entre des processus non liés qui pourraient ne pas exister en même temps.
la source
/run
sur un système de bureau Linux, vous en trouverez probablement quelques-uns (nommés fifos et unix sockets). C'est une forme de CIP .Un avantage non mentionné ailleurs est qu'un canal nommé peut être utilisé dans des endroits où seul un fichier suffira.
Par exemple, certains clients de messagerie ont pour fonction d’ajouter le contenu de ~ / .signature à chaque message électronique. Si .signature était une option de ligne de commande ou si le client de messagerie était capable de remarquer que .signature était exécutable et de l'exécuter, vous n'auriez pas besoin d'un canal nommé. Mais si le client de messagerie n’est pas aussi sophistiqué, vous pouvez créer un canal nommé nommé .signature et exécuter une application qui génère une nouvelle signature à chaque lecture du fichier.
la source
Les canaux nommés présentent un autre avantage: vous pouvez les utiliser sur différents systèmes . Supposons que vous souhaitiez une communication en temps réel de deux processus s'exécutant sur des machines différentes. Ensuite, partagez un dossier entre les deux, placez votre FIFO sur le dossier, et c'est parti. C'est beaucoup plus facile que de transformer une application conçue pour travailler sur des fichiers en un service d'écoute sur un port.
la source