当前位置: 代码迷 >> 综合 >> linux read pipe
  详细解决方案

linux read pipe

热度:97   发布时间:2024-01-25 03:48:00.0

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.

  相关解决方案