Les pipes nommées (fifo) ont quatre trois avantages auxquels je peux penser:
(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 concernepopen()