15-5 匿名管道进程间通信的原理

https://blog.csdn.net/gjy_it/article/details/104511556

15-5-6 进程间通信之匿名管道 - 图115-5-6 进程间通信之匿名管道 - 图215-5-6 进程间通信之匿名管道 - 图315-5-6 进程间通信之匿名管道 - 图4

15-6 实战通过socketpair进行进程间通信

图片.png
socketpair.c

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<unistd.h>
  4. #include<sys/socket.h>
  5. int main()
  6. {
  7. int sv[2]; //一对无名的套接字描述符
  8. if(socketpair(PF_LOCAL,SOCK_STREAM,0,sv) < 0) //成功返回零 失败返回-1
  9. {
  10. perror("socketpair");
  11. return 0;
  12. }
  13. pid_t id = fork(); //fork出子进程
  14. if(id == 0) //子进程
  15. {
  16. const char* msg = "I'm children!\n";
  17. char buf[1024];
  18. close(sv[1]);
  19. while(1)
  20. {
  21. write(sv[0],msg,strlen(msg));
  22. sleep(1);
  23. ssize_t _s = read(sv[0],buf,sizeof(buf)-1);
  24. if(_s > 0)
  25. {
  26. buf[_s] = '\0';
  27. printf("parent say to children : %s\n",buf);
  28. }
  29. }
  30. } else { // parent父进程
  31. const char* msg = "I'm father!\n";
  32. char buf[1024];
  33. close(sv[0]);//关闭写端口
  34. while(1)
  35. {
  36. ssize_t _s = read(sv[1],buf,sizeof(buf)-1);
  37. if(_s > 0)
  38. {
  39. buf[_s] = '\0';
  40. printf("Children say to parent : %s\n",buf);
  41. usleep(1);
  42. }
  43. write(sv[1],msg,strlen(msg));
  44. }
  45. }
  46. return 0;
  47. }

图片.png
可以看到来回打印子进程和父进程的内容。