zoukankan      html  css  js  c++  java
  • 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!

     

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

  • 相关阅读:
    Java 并发理论简述
    Java 并发之原子性与可见性
    JVM 简述
    【算法导论】第5章,概率分析和随机算法
    【算法导论】第3、4章,增长和递归式
    【python】matplotlib进阶
    【dlbook】实践方法论
    【dlbook】优化
    【dlbook】正则化
    【dlbook】深度网络
  • 原文地址:https://www.cnblogs.com/wxmdevelop/p/7732015.html
Copyright © 2011-2022 走看看