进程通信之管道

管道通信分为两种,一种是匿名管道,另一种是命名管道,对于这两种管道有什么区别呢?
匿名管道,顾名思义就是没有名字,他只能让拥有血缘关系的两个进程进行通信,它是让两个进程分别连接管道的读端和写端,将数据保存在该管道内,两个进程就都能看到这些信息了。
因为匿名管道不能让两个没有血缘关系的进程通信,那么这些进程想要通信要怎么办呢?所以命名管道就出现了。
命名管道可以让两个毫无关系的进程进行通信,它是在硬盘上创建了一个管道文件,它在创建时需要定义路径,所以其他进程也可以连接到该管道,就实现了两个没有关系的进程间通信。
那么匿名管道如何让编写呢?

子进程向父进程发送一个hello world的消息:

  1 #include <sys/types.h>
  2 #include <sys/wait.h>
  3 #include <unistd.h>
  4 #include <stdio.h>
  5 #include <string.h>
  6 int main()
  7 {    
  8     ssize_t n;
  9     int i=0;                                                              
 10     int fd[2]={0, 0 };
 11     char buf[1024];
 12      //判断创建的管道是否成功
 13     if(pipe(fd)<0)
 14     {
 15         perror("pipe");
 16         return 1;
 17     }
 18     pid_t pid = fork();
 19     if(pid < 0)
 20     {
 21         perror("fork");
 22         return 2;
 23     }
 24     if(pid == 0)
 25     {
 26         close(fd[0]);//--->write
 27         const char* arr = "hello linux!\n";
 28         while(i<10)
 29         {
 30             write(fd[1], arr, strlen(arr));
 31             sleep(1);
 32             i++;                                                          
 33         }
 34     }
 35     else
 36     {
 37         close(fd[1]);//---->read
 38         i=0;
 39         while(i<10)
 40         {
 41             n = read(fd[0], buf, sizeof(buf)-1);
 42             if(n > 0)
 43             {
 44                 buf[n-1] = 0;
 45                 printf("client->father#%s\n", buf);
 46             }
 47             i++;                                                          
 48         }
 49     }
 50     return 0;
 51 }

子进程先向管道内写入信息,父进程在从管道内读取信息。
这里写图片描述

匿名管道的通信方式:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值