Je veux lire la sortie du processus de mon enfant, mais pour une raison quelconque, il arrête de définir le POLLIN dans revents quand il y a encore une sortie à lire.polling des enfants stdout arrête le réglage de POLLIN après la première lecture
Voici ce que je fais:
- Fork mon processus
- créer tuyau
- dup2 (pipe [0], STDOUT_FILENO) mon de stdout enfant
- sondage le descripteur de fichier du tuyau (Je le fais avant d'avoir atteint EOF)
- sortie de lecture si POLLIN est réglé
la façon dont je vois si j'ai atteint un EOF est en mettant un drapeau dans une structure si après le sondage, il n'y avait pas de POLLIN défini dans revents.
(poll_fds[idx].revents & ~POLLIN)
Maintenant, c'est toujours vraie même si POLLIN est réglé, je suppose que son beacuse un certain indicateur d'erreur est situé sur la bitmask, droit ??
la façon dont je teste mon programme est ./my_program/bin/ls
maintenant cela devrait imprimer la sortie de ls sur ma console mais il imprime seulement les 16 premiers octets (je l'ai lu() exactement 16 octets) .
Je ne sais pas pourquoi le drapeau d'erreur est en train de se fixer des idées?
EDIT: Je viens de voir que le drapeau qui est en train d'être réglé est POLLHUP ... mais je ne comprends pas pourquoi il est réglé si je n'ai pas encore lu tout le tuyau ??
Y at-il une très bonne raison pour laquelle vous n'utilisez pas simplement 'popen()'? –
J'utilise read pour m'assurer qu'il ne bloque pas. – woolagaroo
La bonne façon de vérifier EOF est 'read' retournant 0. – caf