系统编程 父子进程间管道通信实现Linux指令

  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 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值