gpt4 book ai didi

c - 在读取之前等待 popen 子进程终止

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:07 29 4
gpt4 key购买 nike

我如何知道 popen 启动的进程何时完成?

我正在将描述符(从 popen 返回的 FILE * 上调用的 fileno())传递给调用 fstat() 的函数,并使用返回的值来确定要读取多少。令人惊讶的是,如果存在延迟(例如,单步执行调试器),这实际上有效,但如果在 popen 后立即调用,则返回的文件大小为零。所以我需要一些方法来等待所有输出准备就绪 - 我该怎么做?我假设我无法调用 pclose(),即使它在等待,因为这样描述符就不再有效了。

更新:实际上,如果我假装 fstat() 在管道调用中失败,代码似乎工作正常 - 问题似乎是 fstat() 没有像预期的那样失败。所以我真正想要的是一种判断描述符是否为管道的方法 - fstat 返回 st_mode=0(期待 S_IFIFO!)

最佳答案

如果您不从管道读取数据,则子进程很可能永不终止。管道两端之间的缓冲区相当小。因此,当子进程写入输出时,缓冲区将填满并且子进程将阻塞在 write() 调用中。那么你就会陷入僵局。父进程在从管道读取之前等待子进程终止,子进程被阻塞直到父进程从管道读取因此无法终止。

关于c - 在读取之前等待 popen 子进程终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29554036/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com