将一个进程stdout重定向到管道会产生差异运行结果吗?

时间:2014-01-09 13:42:28

标签: c++ process pipe poco

    Poco::Pipe outputPipe;
    Poco::Pipe errorPipe;
    Poco::Process::Env env;
    Poco::Process::Args arg;
    Poco::Process::launch(exeFile, arg, workDir, 0 , &outputPipe, &errorPipe, env);

我使用上面的代码创建了两个进程,一个是正确的,另一个是错误的。然后我改变了代码

    Poco::Process::launch(exeFile, arg, workDir, 0 , 0, 0, env);

唯一的区别是我没有将stdout和stderr重定向到管道。然后我创建了两个进程,现在可以了。

在我看来,我不认为重定向stdout和stderr会导致进程运行不同的结果。是不是?

如果我错了,会有什么情况会有所不同?

感谢。

1 个答案:

答案 0 :(得分:1)

改变至少有两种方式可以产生影响:

  1. 您不会显示读取管道的代码。如果其中一个管道在读取代码读取数据之前填充,则启动的进程将阻止写入管道,直到从管道读取数据。

  2. 当输出(特别是)是管道时,输出可能是完全缓冲的,而不是行缓冲或无缓冲。这可能意味着输出不会像unpiped示例中那样迅速出现。你的程序可能会写一行,然后做一些工作,然后写另一行,但这些都不必发送到读取管道的进程(除非应用程序刷新输出,或设置行缓冲输出模式)。 / p>