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.