当前位置: 技术问答>linux和unix
请问关于pipe通信的问题
来源: 互联网 发布时间:2016-07-09
本文导语: 请问下面的代码为什么非要关闭pipe的端口?为什么我把两行close();注释掉程序就不走了? #include #include #include int main(void) { int fd[2]; pipe(fd); if (fork()) { /* PARENT */ dup2(fd[...
请问下面的代码为什么非要关闭pipe的端口?为什么我把两行close();注释掉程序就不走了?
#include
#include
#include
int main(void) {
int fd[2];
pipe(fd);
if (fork()) {
/* PARENT */
dup2(fd[0], STDIN_FILENO);
//close(fd[1]);
execlp("wc", "wc", "-l", (char *) NULL);
} else {
/* CHILD */
dup2(fd[1], STDOUT_FILENO);
//close(fd[0]);
execlp("ls", "ls", "-l", "-r", "-t", (char *) NULL);
}
return -1;
}
#include
#include
#include
int main(void) {
int fd[2];
pipe(fd);
if (fork()) {
/* PARENT */
dup2(fd[0], STDIN_FILENO);
//close(fd[1]);
execlp("wc", "wc", "-l", (char *) NULL);
} else {
/* CHILD */
dup2(fd[1], STDOUT_FILENO);
//close(fd[0]);
execlp("ls", "ls", "-l", "-r", "-t", (char *) NULL);
}
return -1;
}
|
管道就两个句柄,一个读一个写,fork后子进程继承了父进程的两个句柄,要实现父进程到子进程的管道,必须保证管道就一个读句柄,一个写句柄。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。