当前位置: 技术问答>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后子进程继承了父进程的两个句柄,要实现父进程到子进程的管道,必须保证管道就一个读句柄,一个写句柄。