其他分享
首页 > 其他分享> > c – 从popen()中抑制输出

c – 从popen()中抑制输出

作者:互联网

有没有办法抑制popen()的输出而不会丢失Wait().

测试1:

FILE * stream = NULL;
char buffer [120];

stream = popen ("ffmpeg -y -i test.amr -ar 16000 test.wav -v quiet", "r");

while (fgets (buffer, sizeof(buffer), stream))
{
}

pclose (stream);

测试2:

FILE * stream = NULL;
char buffer [120];

stream = popen ("ffmpeg -y -i test.amr -ar 16000 test.wav -v quiet &> /dev/null", "r");

while (fgets (buffer, sizeof(buffer), stream))
{
}

pclose (stream);

测试2的问题是pclose()没有等待管道完成处理.每次我必须做一个管道时,我不希望有一堆FFMPEG输出.

解决方法:

当您想要向子进程发送数据或从子进程读取数据时,您应该只使用popen()(这是一个独占的;或者如果您想要同时执行这两个操作,则必须自己设置连接).

如果您不想这样做,请不要使用popen().

正如jim mcnamara准确explained,假设在创建管道后将子输出重定向到/ dev / null,重定向将关闭程序的管道输入,因此popen()获取零字节以读取,计为EOF.并且它返回 – 没有更多的东西可供阅读(如果它可能有更多,它将不会收到EOF).

在这种情况下,使用system();它将等待孩子完成 – 即使孩子的输出被重定向到/ dev / null.在其他情况下,可能适合使用较低级别的fork()和exec *()例程.

标签:c-3,linux,ffmpeg,popen,suppress
来源: https://codeday.me/bug/20190630/1335018.html