我正在尝试执行我在popen中创建的程序,然后收集输出。我执行的程序需要30秒(有30个睡眠(1)s),每秒后它会发送一块输出。让我感到困惑的是,当我调用pipe = popen("test -flag", "r")
时,它会立即完成并且FILE流管道为空。我的假设是程序将停止并等待测试在继续之前完成执行,或者它是否启动订单以收集输出并立即继续?如果是后者,有没有办法暂停程序,直到管道在继续之前具有所有输出?
谢谢!
答案 0 :(得分:2)
对popen()
的调用应该相对较快,因此您的程序可以继续读取程序的输出。当然,popen()
本身并不等待被调用的程序完成。一旦popen()
返回,您的程序应该能够从文件流中读取;它将挂起,直到有输入等待,或直到另一个进程关闭管道(例如终止),此时它将获得EOF指示。然后,您可以pclose()
您正在阅读的信息流。
当您的测试程序直接运行并将其输出发送到管道时,您的测试程序如何表现?请注意,当输出是管道(完全缓冲)而不是终端(线路缓冲)时,标准I / O通常表现不同。
答案 1 :(得分:1)
阅读pipe
,直到返回EOF
。