Я работаю над приложением, которое выполняет 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()
между 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
из оболочки также работает (но не из моего приложения).
Я не смог найти простой (или какой-либо) способ заставить чтение из обоих каналов работать.Как этого достичь?