• Linux 利用管道父子进程间传递数据


    [原文

    fork()函数:用于创建子进程,子进程完全复制父进程的资源,相当于父进程的拷贝。具体理解,运用父进程的同一套代码,通过判断进程ID来执行不同进程的不同任务。

    返回值正常为子进程ID,出错返回负值。

    pipe()函数:用于创建管道,返回负值表示创建失败。

     

    简单实例:

     功能:父进程通过管道向子进程传递字符串,然后子进程向屏幕打印出所收到的字符串。

    [objc] view plain copy
    1. <pre class="objc" name="code">#include <stdio.h>  
    2. #include <unistd.h>  
    3. #include <sys/types.h>  
    4.   
    5. int main(void)  
    6. {  
    7.     int n,fd[2];  
    8.     pid_t pid;  
    9.     char line[1024];  
    10.       
    11.     if (pipe(fd) < 0)  
    12.         return 1;  
    13.     if ((pid=fork()) < 0)  
    14.         return 1;  
    15.     else if (pid > 0)    //parent  
    16.     {  
    17.         close(fd[0]);   //close parent's read-port  
    18.         write(fd[1],"I am from parent! ",19);  //write to pipe  
    19.     }  
    20.     else    //child  
    21.     {  
    22.         close(fd[1]);   //close child's write-port  
    23.         n = read(fd[0],line,1024);  //read from pipe  
    24.         printf("%s%d ",line,n);  
    25.     }  
    26.     printf("I am public! ");  
    27.     return 1;  
    28. }  


     


    运行结果:

    I am public!
    I am from parent!
    19
    I am public!

     

    通过上面实例,可以清楚认识父子进程运行情况;通过关闭父进程读端口,关闭子进程写端口实现数据由父进程传向子进程的单向管道传输。

  • 相关阅读:
    static 关键字
    gitlab 配置到jenkins
    Eclipse下代码字体背景变红/变绿/变黄原因
    构造方法(和python初始化变量类似)
    面向对象(实际就像python跳用自己写的库那样)
    Python 的AES加密与解密
    break 和 continue 的用法
    for循环
    Eclipse快捷键
    java三元运算符
  • 原文地址:https://www.cnblogs.com/wxmdevelop/p/7732015.html
Copyright © 2020-2023  润新知