我正在开发一个 popen() 另一个进程的应用程序,其输出 - stderr 和 stderr - 需要重定向到两个命名管道,这两个命名管道也是由应用程序创建的。然后我需要从管道中读回数据。
mkfifo("output.fifo", 0666); // error checks etc.
mkfifo("error.fifo", 0666); // error checks etc.
popen("cstuff 'param' < input.txt 1> output.fifo 2> error.fifo", "r");
不起作用:当我尝试从error.fifo读取时,应用程序挂起。sleep()
ing / wait()
ing 在 and 之间mkfifo()
也popen()
不起作用。
// output.txt is the result from a file dialog
popen("cstuff 'param' < input.txt 1> output.txt 2> error.fifo", "r");
确实有效。
popen("cstuff 'param' < input.txt 1> output.fifo", "r");
也有效。
$ cstuff 'param' < input.txt 1> output.txt 2> output.txt
从外壳也可以(但不是从我的应用程序)。
我找不到一种直接(或任何)方法来从两个工作的管道中读取数据。怎样才能做到这一点?