歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下進程間的通信——管道

Linux下進程間的通信——管道

日期:2017/3/1 11:08:44   编辑:Linux編程
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <sys/types.h>
  6. int main(void)
  7. {
  8. int result=-1;
  9. int fd[2],nbytes;//數組用來存放管道兩端的文件描述符
  10. pid_t pid;
  11. char string[]="hello , pipe";//要發送的內容
  12. char readbuffer[80];
  13. int *write_fd=&fd[1];//寫接口文件描述符,本例給子進程調用
  14. int *read_fd=&fd[0];//讀接口文件描述符,www.linuxidc.com注意哪個是讀,哪個是寫
  15. result=pipe(fd);//創建一個管道
  16. if(result==-1)
  17. {
  18. printf("pipe create error\n");
  19. return -1;
  20. }
  21. pid=fork();//創建一個子進程
  22. if(pid==-1)
  23. {
  24. printf("fork error\n");
  25. return -1;
  26. }
  27. if(pid==0)
  28. {
  29. close(*read_fd);//注意管道的工作方式為半雙工
  30. result=write(*write_fd,string,strlen(string));//寫到管道
  31. return 0;
  32. }
  33. else
  34. {
  35. close(*write_fd);
  36. nbytes=read(*read_fd,readbuffer,sizeof(readbuffer));//從管道中讀取
  37. printf("recieved %d date , contain : \"%s\"\n",nbytes,readbuffer);
  38. }
  39. return 0;
  40. }

這是一個進程間通過管道進行通信的例子

從這個例子中我們可以看到,子進程通過管道給父進程發送了“hello , pipe”,管道通信中要注意源代碼中標注的一些細節。

Copyright © Linux教程網 All Rights Reserved