zoukankan      html  css  js  c++  java
  • Linux学习笔记——管道PIPE

    管道:当从一个进程连接数据流到另一个进程时,使用术语管道(pipe)。
    # include <unistd.h>

    int pipe(int filedes[2]); //创建管道

    pipe()说明:

    返回值:0成功,-1出错。

    如果调用成功,则进程此时由了两个额外的打开文件描述符,filedes[0]中的值是管道的读取端,而filedes[1]是管道的写入端。
    #include<unistd.h>

    #include<sys/types.h>

    #include<errno.h>

    #include<stdio.h>

    #include<stdlib.h>
    int main(){   

      int pipe_fd[2];

        pid_t pid;   

      char buf_r[100];  

       char *p_wbuf;    

    int r_num;
        memset(buf_r,0,sizeof(buf_r));
        //创建管道   

      if(pipe(pipe_fd)<0){   

          printf("pipe create error/n");    

        return -1;   

      }
        if((pid=fork())==0){

    //表示在子进程中        

    printf("/n");        

    //关闭管道写描述符,进行管道读操作  

           close(pipe_fd[1]);      

       sleep(2);        

    //管道描述符中读取    

        if((r_num=read(pipe_fd[0],buf_r,100))>0){    

            printf("%d numbers read from the pipe is %s/n",r_num,buf_r);   

          }    

        close(pipe_fd[0]);   

          exit(0);    

    }    

    else if(pid>0){

    //表示在父进程中,父进程写   

      //关闭管道读描述符,进行管道写操作

            close(pipe_fd[0]);       

      if(write(pipe_fd[1],"Hello",5)!=-1)    

            printf("parent write1 success!/n");  

           if(write(pipe_fd[1],"Pipe",5)!=1)   

              printf("parent write2 success!/n");    

        close(pipe_fd[1]);      

       sleep(3);       

      waitpid(pid,NULL,0);  

           exit(0);  

       }

    }   

       管道读写注意事项: 1.必须在系统调用fork()中调用pipe(),否则子进程将不会继承文件描述符; 2.当使用半双工管道时,任何关联的进程都必须共享一个相关的祖先进程。

    转载声明: 本文转自 http://hi.baidu.com/glowzrf/blog/item/2e3edd17ed23b8044b90a70e.html

    ======================================================================

    扩展参考:

    命名管道FIFO——Linux笔记

    http://hi.baidu.com/glowzrf/blog/item/dcaf96fb28c941136d22eb9f.html

    信号——Linux学习笔记

    http://hi.baidu.com/glowzrf/blog/item/2828d6ce8a17d63cb700c8e9.html

    守护进程——Linux学习笔记

    http://hi.baidu.com/glowzrf/blog/item/35fd44949629781bd31b70d7.html

    共享内存——Linux学习笔记

    http://hi.baidu.com/glowzrf/blog/item/9a2e97e7e9f1272bb938208d.html

  • 相关阅读:
    NPM 重新回炉
    构建工具
    工作的环境部署
    Proxy 代理
    Promise 的 用法及实现
    JS 的 继承
    动态规划——LCS
    矩阵连乘——动态规划
    线段树&树状数组
    SpringAOP
  • 原文地址:https://www.cnblogs.com/lingling99/p/3584919.html
Copyright © 2011-2022 走看看