一个关于pipe的小疑点
一个关于pipe的小问题
如果在一个程序里pipe分别让子进程和父进程写读,父进程需要使用wait()函数吗?
例如:
个人感觉,如果用了read,进程就会被阻挡,直到子进程的write结束,所以不用wait子进程。 但是我不是很确定,不知道这里有没有其他的例外?
请版里的大侠指点一二,小弟不胜感激。
------解决方案--------------------
没有例外哈,read循环读到0为止,再进入wait回收一下资源就可以了。
------解决方案--------------------
嗯,需要的,不过不是在那个位置,而是在read之后的。
------解决方案--------------------
read函数默认是会阻塞,因此只要有内容写入我觉得可以读到内容的,wait的作用是阻塞等待某个子进程退出后做清理工作的,LZ不用调wait来让子进程退出后再让read函数读管道中的内容。
另外pipe是个函数,调用的时候用pipe(fd);
------解决方案--------------------
可以放心的,可以不加wait(NULL);
read会阻塞直到写完的。
如果在一个程序里pipe分别让子进程和父进程写读,父进程需要使用wait()函数吗?
例如:
int fd[2];
pipe[fd];
pid_t pid = fork();
if(pid == 0){
close(fd[0]);
write(fd[1], "Hello", 5);
}
else if(pid > 0){
wait(NULL); //这里需要用wait吗?
char buf[BUFSIZ];
close(fd[1]);
read(fd[0], buf, BUFSIZ);
}
个人感觉,如果用了read,进程就会被阻挡,直到子进程的write结束,所以不用wait子进程。 但是我不是很确定,不知道这里有没有其他的例外?
请版里的大侠指点一二,小弟不胜感激。
c
pipe
linux
进程
------解决方案--------------------
没有例外哈,read循环读到0为止,再进入wait回收一下资源就可以了。
------解决方案--------------------
嗯,需要的,不过不是在那个位置,而是在read之后的。
------解决方案--------------------
read函数默认是会阻塞,因此只要有内容写入我觉得可以读到内容的,wait的作用是阻塞等待某个子进程退出后做清理工作的,LZ不用调wait来让子进程退出后再让read函数读管道中的内容。
另外pipe是个函数,调用的时候用pipe(fd);
------解决方案--------------------
可以放心的,可以不加wait(NULL);
read会阻塞直到写完的。