C++ 将一个进程标准重定向到管道会改变运行结果吗?

C++ 将一个进程标准重定向到管道会改变运行结果吗?,c++,process,pipe,poco,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::Pipe outputPipe;
    Poco::Pipe errorPipe;
    Poco::Process::Env env;
    Poco::Process::Args arg;
    Poco::Process::launch(exeFile, arg, workDir, 0 , &outputPipe, &errorPipe, env);
唯一的区别是我没有将stdout和stderr重定向到管道。然后我创建了两个过程,现在一切正常

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

如果我错了,什么情况会造成不同


谢谢。

至少有两种方式可以让变化有所不同:

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

  • 当输出(特别是)是管道时,输出可能是完全缓冲的,而不是行缓冲或非缓冲的。这可能意味着输出不会像未管道示例中那样快速显示。您的程序可能先写一行,然后做一些工作,然后再写另一行,但这两行都不一定发送到读取管道的进程(除非应用程序刷新输出或设置行缓冲输出模式)


  • 你说得对。我读取管道的代码是错误的,因此管道填充并启动流程块。谢谢
        Poco::Process::launch(exeFile, arg, workDir, 0 , 0, 0, env);