在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;
(有什么錯誤希望各位指出,本人定會改正,謝謝各位的閱讀)