为什么父进程在读取管道操作时不会阻塞?

时间:2017-07-01 15:17:57

标签: unix pipe fork

我有以下代码:

int main(int c, char** v) 
{
  int p[2], n;
  char s[10] = "ceva";
  pipe(p);
  n = fork();
  if(n == 0) 
  {
    close(p[0]);
    printf("Before\n");
    if(c > 2)
      execlp("grep","grep",v[1],v[2],NULL);
      strcpy(s, "after");   
    write(p[1], s, 6);
    close(p[1]);
    exit(0);
   } 
  close(p[1]);
  read(p[0], s, 6);
  close(p[0]);
  printf("%s\n", s);
  return 0;
}

使用./grep grep grep.c运行代码时,我希望父进程在包含read(p[0], s, 6);的行处阻塞,因为子进程不会在管道中写入任何内容,也不会关闭写入结束。

你能否指出我在哪里思考不正确?

非常感谢。

0 个答案:

没有答案