首页 > 代码库 > Linux 管道的实现模型
Linux 管道的实现模型
//管道的实现 //当前目录下实现命令"ls | wc -w" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> int main() { int pipefds[2]={0}; //创建匿名管道 if(pipe(pipefds)==-1) { perror("pipe() err"); return -1; } pid_t pid=fork(); if(pid==-1) { perror("fork() err"); return -1; } if(pid==0) { //子进程关闭读文件描述符 close(pipefds[0]); //dup2()函数把匿名管道的读文件描述符赋值给STDIN_FILENO,而STDIN_FILENO原先指向的文件表被关闭 //将ls命令的结果输出到管道中 dup2(pipefds[1],STDOUT_FILENO); //close()只是关闭文件描述符引用 现在pipefds[1]指向的文件表同时被pipefds[1]和STDIN_FILENO引用 //关闭pipefds[1],文件表还在 close(pipefds[1]); execlp("ls","ls",NULL); printf("execlp() failed !\n"); }else if(pid>0) { //关闭写文件描述符 close(pipefds[1]); dup2(pipefds[0],STDIN_FILENO); close(pipefds[0]); //wc可以从终端读取数据,此时终端就是管道 execlp("wc","wc","-w",NULL); printf("execlp() failed !\n"); } return 0; }
Linux 管道的实现模型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。