基于管道通信

来源:互联网 发布:g41g42数控车编程方法 编辑:程序博客网 时间:2024/06/05 07:51

学习匿名管道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通常使用命名管道来传递。

 

 

  
原创粉丝点击