c++ - 将一个进程标准输出重定向到管道会影响运行结果吗?

标签 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. 您没有显示读取管道的代码。如果在读取代码读取数据之前其中一个管道已满,启动的进程将阻止写入管道,直到从管道读取数据。

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

关于c++ - 将一个进程标准输出重定向到管道会影响运行结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021909/

相关文章:

c++ - 带有 const 模板和 const 引用模板参数的 std::map

c++ - 无法从 raspberry pi pico ( c sdk ) 发送串行数据

c++ - C - 打印 float - 转换为 int 时精度损失

java - IllegalStateException : Not supported on AsyncContext. startAsync(请求,资源)

macos - 在 OSX 中搜索并销毁 Rouge 进程

vim - 使用 --remote 时如何向 gvim 发送命令?

r - 如何根据 dplyr 管道中另一列的第一行的值重命名列

C++ std::stack 遍历

c# - 如何安全地附加到 ProcessStartInfo.EnvironmentVariables ["PATH"]

unix - 对 stdin 和 stdout 使用相同的文件进行重定向