Unix 为什么父进程在读取管道操作时不阻塞?
我有以下代码:Unix 为什么父进程在读取管道操作时不阻塞?,unix,pipe,fork,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");
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.c
运行代码时,我希望父进程在包含读取(p[0],s,6)的行处阻塞代码>因为子进程不在管道中写入任何内容,也不关闭写入端
你能告诉我哪里思维不正确吗
非常感谢。孩子执行grep,它运行到完成并退出,关闭管道的写入端。由于父进程还关闭了管道的两端,因此读取返回。确定,因此exec进程是关闭管道的写入端。:)非常感谢。:)