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!\n",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\n",line,n);  
  25.     }  
  26.     printf("I am public!\n");  
  27.     return 1;  
  28. }  


 

 
         


運行結果:

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

 

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


免責聲明!

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



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