1 #include <stdio.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4 #include <sys/wait.h>
5
6 int main ()
7 {
8 int pipefd[2];
9 int ret = pipe(pipefd);
10 if (ret < 0) {
11 perror("pipe error");
12 return -1;
13 }
14
15 if (fork() == 0) {
16 //运行ps进程-》打印进程内容到标准输出
17 close(pipefd[0]);
18 dup2(pipefd[1], 1);
19 execlp("ps", "ps", "-ef", NULL);
20 exit(-1);
21 }
22 if (fork() == 0) {
23 //运行grep进程-》获取指定内容
24 close(pipefd[1]);
25 dup2(pipefd[0], 0);
26 execlp("grep", "grep", "pipe", NULL);
27 exit(-1);
28 }
29 //不用的读写就最好关闭
30 close(pipefd[1]);//关闭父进程的写端,以至于读完能退出不阻塞
31 close(pipefd[0]);
32 wait(NULL);
33 wait(NULL);
34 printf("程序运行完毕\n");
35 return 0;
36 }
【Linux】进程通信--模拟实现管道符
最新推荐文章于 2021-07-29 11:02:55 发布