当前位置:   article > 正文

Linux-管道_linux创建管道

linux创建管道

今天来说一下linux管道

进程间通信:

1.普通文件:俩个进程访问同一个文件 先后顺序

2.文件映射虚拟内存: 父子之间

3.管道

4.信号

5.IPC 共享内存

6.IPC 消息队列

7.IPC 信号量

8.网络通信

现在说一下管道

一 管道:管道是个文件  FIFO First In First Out

(1)匿名管道:没有名字,父子进程之间

                  直接用文件描述符

                 fds[0]用来读

                 fds[1]用来写

          1.创建文件描述符号  int fds[2];

          2.把文件描述符号变成管道  pipe

          3.使用管道进行通信

           4.关闭 close

(2)有名管道:有名字

         可以在同一主机上不同进程之间操作   有具体文件

         1.创建管道文件(mkfifo)

          2.打开管道文件

          3.使用管道文件读/写

          4.关闭

          5.删除管道文件

二:匿名管道代码:

  1. #include<stdio.h>
  2. #include<unistd.h>
  3. #include<string.h>
  4. int main()
  5. {
  6. int fds[2];
  7. pipe(fds); //把文件描述符号变成管道
  8. if(fork())
  9. { //使用管道通信
  10. char temp[1024];
  11. int r;
  12. while(1)
  13. {
  14. r=read(fds[0],temp,1023);//读数据
  15. if(r>0)
  16. {
  17. temp[r] = 0;
  18. printf(">> %s\n",temp);
  19. }
  20. }
  21. }
  22. else
  23. {
  24. char temp[1024];
  25. while(1)
  26. {
  27. memset(temp,0,1024);
  28. printf("发送啥:");
  29. scanf("%s",temp);
  30. write(fds[1],temp,strlen(temp));
  31. }
  32. }
  33. close(fds[0]);
  34. close(fds[1]);
  35. return 0;
  36. }

三:有名管道代码

  1. #include<unistd.h>
  2. #include<stdio.h>
  3. #include<sys/types.h>
  4. #include<sys/stat.h>
  5. #include<string.h>
  6. #include<fcntl.h>
  7. #include<stdlib.h>
  8. int main()
  9. {
  10. //创建管道文件(mkfifo)
  11. int r = mkfifo("test.pipe",0666);
  12. if(0 == r)
  13. {
  14. printf("创建管道文件:%m\n");
  15. }
  16. else
  17. {
  18. printf("创建管道文件失败:%m\n");
  19. exit(-1);
  20. }
  21. //打开管道文件
  22. int fd = open("test.pipe",O_WRONLY);
  23. if(-1 == fd)printf("打开管道文件失败:%m\n"),unlink("test.pipe"),exit(-1);
  24. printf("打开管道文件成功\n");
  25. //使用管道文件 写
  26. int n=0;
  27. char buff[56];
  28. while(1){
  29. memset(buff,0,56);
  30. sprintf(buff,"玩游戏:%d",++n);
  31. write(fd,buff,strlen(buf));
  32. sleep(1);
  33. }
  34. //关闭
  35. close(fd);
  36. //删除
  37. unlink("test.pipe");
  38. return
  39. }
  1. #include<unistd.h>
  2. #include<stdio.h>
  3. #include<sys/types.h>
  4. #include<sys/stat.h>
  5. #include<string.h>
  6. #include<stdlib.h>
  7. int main()
  8. {
  9. int fd = open("test.pipe",O_RDONLY);
  10. if(-1 == fd)
  11. {
  12. printf("打开管道文件失败:%m\n");
  13. exit(-1);
  14. }
  15. printf("打开管道文件成功\n");
  16. char buff[56];
  17. int r;
  18. while(1){
  19. memset(buff,0,56);
  20. r=read(fd,buff,55);
  21. if(r>0)
  22. {
  23. buff[r] = 0;
  24. printf(">>%s\n",buff);
  25. }
  26. }
  27. close(fd);
  28. return 0;
  29. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/211980
推荐阅读
相关标签
  

闽ICP备14008679号