首页 文章

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

提问于
浏览
0

我想打开一个程序管道并从中读取输出 . 我最初的倾向是使用popen(),但程序需要很多选项,而不是使用shell引用/转义,我决定使用pipe(),fork(),dup()的组合来绑定管道的末端到父/子中的stdin / stdout,而execv()用程序的调用替换子程序,它传递了它期望作为数组的所有选项 .

程序输出许多行数据(并在每行之后刷新标准输出) . 父代码将stdin设置为非阻塞,并使用fgets()在循环中从中读取 . 循环运行时fgets()返回非NULL或stdin有一个错误条件,即EAGAIN或EWOULDBLOCK .

它成功地接收了大部分行,但最后它似乎下降了,最后的fgets()失败,出现了“没有这样的文件或目录”的奇怪错误 .

有谁知道我在这里做错了什么?

3 回答

  • 0

    我发现了问题 . 我愚蠢的是每次迭代都没有将errno重置为零 . 我想我只是假设fgets()会照顾它或者什么......我的愚蠢错误 . 现在它工作正常 . 总是重置错误!

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

  • 0

    不确定,在linux上有一个名为posix_spawn的酷函数(例如http://www.opengroup.org/onlinepubs/000095399/xrat/xsh_chap03.html#tag_03_03_01_02),有时它会使管道更容易......但听起来像是一个可能的阻塞问题或管道....

  • 2

    确保打开STDERR管道 . 大多数程序在那里写错误数据而不是STDIN .

相关问题