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 会导致进程运行并产生不同的结果。对吗?
如果我错了,什么情况会有所不同?
谢谢。
最佳答案
改变至少可以通过两种方式产生影响:
您没有显示读取管道的代码。如果在读取代码读取数据之前其中一个管道已满,启动的进程将阻止写入管道,直到从管道读取数据。
当输出(特别是)是管道时,输出很可能是完全缓冲的,而不是行缓冲或无缓冲的。这可能意味着输出不会像未使用管道的示例中那样迅速出现。你的程序可能会写一行,然后做一些工作,然后再写一行,但这些都不一定发送到读取管道的进程(除非应用程序刷新输出,或设置行缓冲输出模式)。
关于c++ - 将一个进程标准输出重定向到管道会影响运行结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021909/