【发布时间】:2015-06-15 17:39:51
【问题描述】:
如何判断 popen 启动的进程何时完成?
我将描述符(来自在 popen 返回的 FILE * 上调用的 fileno())传递给调用 fstat() 并使用返回的值来确定要读取多少的函数。令人惊讶的是,如果存在延迟(例如,逐步通过调试器),这实际上可以工作,但如果在 popen 之后立即调用,则返回文件大小为零。所以我需要一些方法来等到所有输出都准备好 - 我该怎么做?我假设我不能调用 pclose() 即使它会等待,因为这样描述符就不再有效了。
更新:实际上,如果我假装 fstat() 在管道调用中失败,代码似乎可以正常工作 - 问题似乎是 fstat() 没有失败,正如预期的那样。所以我真正想要的是一种判断描述符是否是管道的方法 - fstat 返回 st_mode=0 (期待 S_IFIFO!)
【问题讨论】: