question
what will happen if comment out line 13? why?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main()
{int p[2];pipe(p);write(p[1], "hello!\n", 7);write(p[1], "hello!\n", 7);close(p[1]);char buf[101];int n;while ((n = read(p[0], buf, 100))) {write(1, buf, n);}return 0;
}
output
/* comment out line 13 */
$ gcc -o wc -g wc.c
$ ./wc
hello!
hello!
^C # read() wait for input, need ctrl+c to kill the process/* has line 13, the process exit normally */
$ gcc -o wc -g wc.c
$ ./wc
hello!
hello!
$
read() blocks until it is impossible for new data to arrive. that's why need close p[1];
more
what will happen if comment out line 15? why?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main()
{int p[2];pipe(p);if (fork() == 0) {close(0);dup(p[0]);close(p[0]);close(p[1]);char buf[101];int n;while ((n = read(0, buf, 100))) {write(1, buf, n);}}else {close(p[0]);write(p[1], "hello!\n", 7);write(p[1], "hello!\n", 7);close(p[1]);}
}
result: chile process will wait for input forever. parent will exit normally.