1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 #include<errno.h>
5 #include<fcntl.h>
6 int main()
7 {
8 int fd[2];//管道读写端文件描述符
9 int i;//错误接收变量
10 pid_t pid;
11
12 i = pipe(fd);
13 if(i == -1)//pipe函数执行失败返回-1
14 {
15 perror("pipe error\n");
16 exit(1);
17 }
18 printf("fd[0] = %d, fd[1] = %d\n", fd[0], fd[1]);//没什么意义,主要是验证一下fd[0],fd[1]是否是3,4.
19
20 pid = fork();//子进程出来啦
21 if(pid == -1)//失败返回-1并且会设置errno
22 {
23 perror("fork error\n");
24 exit(1);
25 }
26 else if(pid == 0)//子进程执行如下
27 {
28 close(fd[0]);
29 dup2(fd[1], STDOUT_FILENO);//标准输出将不再是屏幕而是管道写端
30 execlp("ls", "ls", NULL);//ls出来的东西将进入管道而不是屏幕
31 perror("execlp error\n");//上面一行失败才会执行
32 }
33 else if(pid > 0)//父进程执行如下,程序如子进程思路
34 {
35 close(fd[1]);
36 dup2(fd[0], STDIN_FILENO);
37 execlp("wc", "wc", "-l", NULL);
38 perror("execlp error\n");
39 }
40 return 0;
41 }
系统编程 父子进程间管道通信实现Linux指令
最新推荐文章于 2022-12-17 11:03:29 发布