J'essaye d'écrire un démon simple sous Linux, qui créera une FIFO, puis rassemblera tout ce qui est écrit dans le FIFO et écrira ces données dans un fichier plus tard.Vous avez du mal à faire fonctionner un FIFO Unix correctement?
Mes attentes sont qu'une fois que mon démon a créé le FIFO, je peux faire "echo text>/myfifo" à plusieurs reprises. Quand j'ai fini, je peux faire "echo quit>/myfifo" et mon programme va quitter et écrire toutes les données sur le disque.
J'utilise actuellement poll() pour savoir quand il y a plus de données sur le FIFO. Cela fonctionne bien jusqu'à la première fois que j'émets des données au FIFO. Les données sont bien écho, mais mon sondage retourne SIGHUP après cela.
Ai-je besoin de réinitialiser (ou fermer & rouvrir) le FIFO après que chaque processus lui écrit?
pseudo-code de mon code ressemble à ceci:
ret = fifo(my_fifo, mode);
fd = open(my_fifo, O_RDONLY | O_NONBLOCK);
polling.fd = fd;
polling.events = POLLIN | POLLPRI;
do {
ret = poll(&polling, 1, -1);
amt = read(fd, buf, bufsize);
// do stuff
} while (!done);
Oui, FIFO doit être rouvert. Beaucoup oublient qu'en mode synchronisation, l'ouverture FIFO bloquerait jusqu'à ce que l'autre côté de la communication l'ouvre aussi. C'est pour le rendre utilisable par exemple. redirections de shell. Donc, d'une certaine manière, il se comporte comme une connexion. – Dummy00001