I looked at the sources just now, and it does this: for (i = 1; i < argc; i++) { pipes[i - 1] = popen(argv[i], "w"); ... setbuf(pipes[i - 1], NULL); }
I.e. each pipe is already unbuffered. Matthew, can you confirm that you are indeed seeing buffered output?