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