zoukankan      html  css  js  c++  java
  • Linux中父子进程之间的通信

        在Linux系统中实现父子进程的通信可以采用pipe()和fork()函数进行实现。利用两个管道在父子进程之间进行通信如:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<sys/types.h>
     4 #include<unistd.h>
     5 #include<string.h>
     6 int main(void){
     7    pid_t pid;
     8    int i=0;
     9    int result = -1;
    10    int fd[2],nbytes;
    11    char string[] = "你好,管道";//对string数组初始化
    12    char readbuffer[80];
    13    int *write_fd = &fd[1];
    14    int *read_fd = &fd[0];
    15    printf("Please input data:"); 
    16    scanf("%s",string);
    17    result = pipe(fd);
    18    if(-1 == result)
    19    {
    20       printf("建立管道失败!\n");
    21       return -1;
    22    }
    23    
    24    pid=fork();
    25    if(-1 == pid) //此处为了验证父子进程是否创建成功,如果未创建成功,则返回-1
    26    {
    27       printf("进程创建失败!\n");
    28       return -1;
    29    }
    30    else if(0 == pid)
    31    {
    32       close(*read_fd);
    33       result = write(*write_fd,string,strlen(string));
    34       return 0;
    35    }
    36    else
    37    {
    38       close(*write_fd);
    39       nbytes = read(*read_fd,readbuffer,sizeof(readbuffer)-1);
    40       printf("接收了%d个数据,内容为:\"%s\"\n",nbytes,readbuffer);
    41    }
    42 return 0;
    43 }

          对于父子进程,在程序运行时首先进入的是父进程,其次是子进程,在此我个人认为,在创建父子进程的时候程序是先运行创建的程序,其次在复制父进程创建子进程。

          fork()函数主要是以父进程为蓝本复制一个进程,其ID号和父进程的ID号不同。对于结果fork出来的子进程的父进程ID号是执行fork()函数的进程的ID号;

          例如:

             父进程, fork返回值是:17025  ID:17024  ,父进程ID:16879

             子进程, fork返回值是:0, ID:17025  ,父进程ID:17024

         pipe()函数是创建管道函数,在管道创建成功时,函数返回值是0;在管道创建失败是,函数返回值是-1;

         (有什么错误希望各位指出,本人定会改正,谢谢各位的阅读)

  • 相关阅读:
    JavaScript操作符instanceof揭秘
    Linux打开txt文件乱码的解决方法
    Working copy locked run svn cleanup not work
    poj 2299 UltraQuickSort 归并排序求解逆序对
    poj 2312 Battle City 优先队列+bfs 或 记忆化广搜
    poj2352 stars 树状数组
    poj 2286 The Rotation Game 迭代加深
    hdu 1800 Flying to the Mars
    poj 3038 Children of the Candy Corn bfs dfs
    hdu 1983 Kaitou Kid The Phantom Thief (2) DFS + BFS
  • 原文地址:https://www.cnblogs.com/zhy128/p/6118218.html
Copyright © 2011-2022 走看看