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が勘違いしてブロックするみたい。