1. 程式人生 > >Linux 利用管道父子進程間傳遞數據

Linux 利用管道父子進程間傳遞數據

csdn ans 函數 fault 判斷 ini popu ges def

[原文]

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. int main(void)
  5. {
  6. int n,fd[2];
  7. pid_t pid;
  8. char line[1024];
  9. if (pipe(fd) < 0)
  10. return 1;
  11. if ((pid=fork()) < 0)
  12. return 1;
  13. else if (pid > 0) //parent
  14. {
  15. close(fd[0]); //close parent‘s read-port
  16. write(fd[1],"I am from parent!\n"
    ,19); //write to pipe
  17. }
  18. else //child
  19. {
  20. close(fd[1]); //close child‘s write-port
  21. n = read(fd[0],line,1024); //read from pipe
  22. printf("%s%d\n",line,n);
  23. }
  24. printf("I am public!\n");
  25. return 1;
  26. }



運行結果:

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

通過上面實例,可以清楚認識父子進程運行情況;通過關閉父進程讀端口,關閉子進程寫端口實現數據由父進程傳向子進程的單向管道傳輸。

Linux 利用管道父子進程間傳遞數據