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;

     (有什么錯誤希望各位指出,本人定會改正,謝謝各位的閱讀)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM