我想打开一个程序的管道并从中读取输出。我最初的倾向是使用 popen(),但该程序有许多选项,而不是与 shell 引用/转义作斗争,我决定使用 pipe()、fork()、dup() 的组合来绑定到父/子中的 stdin/stdout 的管道的末端,以及用程序调用替换子的 execv() 传递了它期望作为数组的所有选项。
该程序输出多行数据(并在每行之后刷新标准输出)。父代码将 stdin 设置为非阻塞,并使用 fgets() 在循环中读取它。当 fgets() 返回非 NULL 或标准输入具有 EAGAIN 或 EWOULDBLOCK 错误条件时循环运行。
它成功接收了大部分行,但到最后它似乎下降了,最后一个 fgets() 失败并出现“没有这样的文件或目录”的奇怪错误。
有谁知道我在这里可能做错了什么?