基于管道通信

学习匿名管道pipe基于父子进程的通信:

 

      匿名管道只能实现相关进程或者说是父子进程之间的通信.

      如果要进行父子进程通信必须要先由父进程创建管道,然后调用fork来创建子进程,才能通信。同一个进程对于同一个管道只能做一件事情要么读管道,要么写管道不可能读写同一个管道,所以通常父进程若是用该管道写数据就会关闭读短。fork之前创建的管道是由父子进程共享,实其是复制了管道的描述符,因此操作的内容是一样的。不要把它想象成两个地址空间.

     int fd[2];

     main()

    {

       pipe(&fd[0]);

       int ret = fork(); 

      close(fd[1]);      //父进程关闭写端,只能从管道0读数据

      switch(ret)

       {

            case 0:

            execvp();

            close[fd[0]];   //子进程关闭读端,可以从管道1写数据                         

       }

 

    }   

命名管道可以实现互不相关进程的通信

 

 命名管道与普通文件的区别:

     
      管道比一般的文件的灵活,因为一般的文件写进去的数据是一直存在的,而管道是随着读的过程数据在减少。

文件读到某位就会结束,而管道会用等待的方式来处理,在通信的过程中由于速率的问题通常会用到管道。比如

 

调试的cli通常使用命名管道来传递。

 

 

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值