Le nom du tube est FIFO. C'est fini.
ls -l | grep keyword
Dans, | est le tube et le nom global du système de fichiers qui lui est donné est le FIFO. Les propriétés sont les mêmes que celles des tuyaux. Dans l'exemple ci-dessus
Cela devient un mouvement comme. Il bloque avec open (), pas avec read () ou write (). Ceci est écrit dans les pages de manuel japonaises, mais il est difficile à comprendre. En d'autres termes, c'est ça.
Les fichiers qui ne peuvent pas être recherchés (tubes et FIFO) commencent la lecture à partir de la position actuelle, et s'il n'y a pas de données, elles sont considérées comme EOF et 0 est renvoyé.
Par conséquent, read () ne bloque pas. Normalement, ce n'est pas un problème, mais si vous voulez configurer un thread pour la communication inter-processus et attendre que les données arrivent en boucle, vous devez le bloquer avec open () pour éviter de gaspiller le processeur. Cependant, en tant qu'être humain, je ne veux pas ouvrir () / fermer () dans chaque boucle. C'est mieux si vous pouvez bloquer avec read ().
La file d'attente de messages POSIX est une file d'attente qui peut stocker un nombre fini de messages de taille fixe. Puisque l'attribut de blocage est ajouté au moment de la création, même si la file d'attente est reçue (s'il s'agit d'une file d'attente de blocage), il se bloquera jusqu'à ce que le message arrive.
Par conséquent, il convient au traitement qui attend l'arrivée d'un message dans une boucle de thread. Il ne génère pas de SIGPIPE comme un tube, et il ne perd pas de données lorsque les deux extrémités du FIFO sont fermées (il conserve les données jusqu'à l'arrêt car c'est la durée de vie du noyau).
Il semble qu'il existe d'autres méthodes de communication inter-processus telles que le sémapho, le signal, la mémoire partagée, etc., mais je pense que ce sera FIFO, file d'attente ou socket de domaine lors de l'exécution à des fins d'échange de données. Je pense que chacun a ses avantages et ses inconvénients, alors j'aimerais les résumer à l'avenir.
Recommended Posts