Unix下管道实现进程间通信

本文探讨了Unix系统下管道在进程间通信的应用,详细介绍了管道通信的特点,如单向传输、FIFO原则和容量限制,并特别讲解了无名管道的实现,强调其在父子进程间通信的角色。通过系统调用write和read实现数据的读写操作。
摘要由CSDN通过智能技术生成

最近在看Java的NIO的JDK源码时,发现在Selector的实现的底层用到了pipe管道的知识,于是就来学习记录一波。

1.进程间利用管道通信的应用场景

主要是数据传输:一个进程需要将数据发送给另外一个进程;

2. 管道通信:

一个进程在管道的尾部写入数据,另一个进程从管道的头部读出数据。管道包括无名管道有名管道两种,前者只能用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信。下面用一个示意图来表示:
管道通信的读与写

3. 管道通信的特点

  1. 管道通讯是单向的,先进先出,有固定的读端和写端。
  2. 数据被进程从管道读出后,在管道中该数据就不存在了。
  3. 当进程去读取空管道的时候,进程会阻塞。
  4. 当进程往满管道写数据时,进程会阻塞。
  5. 管道容量为64KB(#define PIPE_BUFFERS 16
    include/linux/pipe_fs_i.h)

4.无名管道

在Linux系统中,无名管道一旦创建完成后,操作无名管道等同于操作文件。无名管道的读端被视作一个文件;无名管道的写端也被视作一个文件。

发送进程利用文件系统的系统调用write(fd[1],buf,size),把buf种的长度为size字符的消息送入管道入口fd[1],接收进程则使用系统调用read(fd[0],

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值