C 管道未接收子进程的所有输出

C 管道未接收子进程的所有输出,c,unix,pipe,execv,C,Unix,Pipe,Execv,我想打开一个程序的管道并从中读取输出。我最初倾向于使用popen(),但该程序采用了许多选项,而不是使用shell引用/转义,我决定使用pipe()、fork()、dup()的组合来将管道末端绑定到父/子中的stdin/stdout和execv()上若要使用程序调用替换子级,则会将其预期的所有选项作为数组传递 程序输出多行数据(并在每行之后刷新标准输出)。父代码将stdin设置为非阻塞,并使用fgets()在循环中读取它。当fgets()返回非NULL或stdin的错误条件为EAGAIN或ewo

我想打开一个程序的管道并从中读取输出。我最初倾向于使用popen(),但该程序采用了许多选项,而不是使用shell引用/转义,我决定使用pipe()、fork()、dup()的组合来将管道末端绑定到父/子中的stdin/stdout和execv()上若要使用程序调用替换子级,则会将其预期的所有选项作为数组传递

程序输出多行数据(并在每行之后刷新标准输出)。父代码将stdin设置为非阻塞,并使用fgets()在循环中读取它。当fgets()返回非NULL或stdin的错误条件为EAGAIN或ewoldblock时,循环运行

它成功地接收到了大多数行,但在接近结尾时似乎有所下降,最后一个fgets()失败,出现了一个奇怪的错误“没有这样的文件或目录”


有人知道我在这里可能做错了什么吗?

不确定,linux上有一个很酷的函数,叫做(这里的例子),有时它会使执行管道变得更容易。。。但是听起来像是一个可能的阻塞问题或管道…

不确定,linux上有一个很酷的函数,叫做(这里的例子),有时它使管道更容易操作。。。但是听起来像是一个可能的阻塞问题或管道…

请确保打开一个到STDERR的管道。大多数程序都在那里写入错误数据,而不是标准数据。

请确保打开到标准数据的管道。大多数程序在那里写入错误数据,而不是STDIN。

我发现了问题。我愚蠢地没有在每次迭代中将errno重置为零。我想我只是假设fgets()会处理它或者其他什么。。。我愚蠢的错误。现在它运行良好。永远不要


无论如何谢谢你的帮助。

我发现了问题。我愚蠢地没有在每次迭代中将errno重置为零。我想我只是假设fgets()会处理它或者其他什么。。。我愚蠢的错误。现在它运行良好。永远不要


无论如何,谢谢你的帮助。

我想你必须为这一个发布一些代码。我想你必须为这一个发布一些代码。