pipe(2)
linuxのpipe(2)のmanのプログラムで、使わない方のディスクリプタのcloseを後にすると、readでブロックする。
if (cpid == 0) { /* Child reads from pipe */ while (read(pfd[0], &buf, 1) > 0) write(STDOUT_FILENO, &buf, 1); write(STDOUT_FILENO, "\n", 1); close(pfd[0]); close(pfd[1]); /* Close unused write end */ _exit(EXIT_SUCCESS);
子プロセスの書き込み側のディスクリプタが閉じていないので、まだ入力があるとreadが勘違いしてブロックするみたい。