我想读取我孩子的proccess的输出,但由于某种原因,当仍有输出被读取时,它会停止在revents中设置POLLIN。
以下是我的工作:
我看到是否达到EOF的方式是在结构中设置一个标志,如果在轮询之后没有在revents中设置POLLIN。
(poll_fds[idx].revents & ~POLLIN)
现在,即使设置了POLLIN,这总是评估为true,我猜它是因为在bitmask上设置了一些错误标志,对吧?
我测试程序的方式是./my_program / bin / ls
现在这应该在我的控制台上打印ls的输出,但它只打印前16个字节(我读取()正好是16个字节)。
我不知道为什么错误标志正在设置任何想法?
编辑:我刚刚看到正在设置的标志是POLLHUP ...但我不明白为什么它被设置如果我没有读完所有的管道?答案 0 :(得分:1)
(poll_fds[idx].revents & ~POLLIN)
到底是什么?如果设置了任何非POLLIN位,则返回true。可能你想要一个
!(poll_fds[idx].revents & POLLIN)
(~poll_fds[idx].revents & POLLIN)