所以我有一个创建子进程并执行命令(例如ls)的程序。然后,父节点将使用管道发送到子节点并从子节点获取。当我自己从命令行输入命令时,这很好。
然而,当输入来自一个文件时,似乎孩子没有足够的时间来运行,当我从管道读取时,我得到了空值——尽管会有来自它的信息。
除了使用sleep()之外,是否有更好的方法确保孩子在尝试读取之前已经运行?
谢谢!

最佳答案

如果您没有将管道文件描述符设置为非阻塞,那么应该没有问题。管道上的任何读取都将阻塞,直到子进程生成输出;如果需要响应多个文件描述符(例如,来自用户的标准输入和来自子进程的管道),请使用select()poll()
我假设返回空值的是fgets()。指示文件结尾(表示子级已关闭其管道结尾)或错误的。您可以使用feof()ferror()检查其中哪个是真的。在错误案例中使用perror()查看实际错误是什么。

关于c - C IPC等待 child ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2741322/

10-15 00:33