Linux下的IPC-命名管道的使用

本文详细介绍了Linux下命名管道的使用,包括创建、打开、读写及阻塞与非阻塞模式。强调了命名管道在进程间通讯中的作用,并提供了测试代码示例,讨论了命名管道的特性及其在实际应用中需要注意的问题。
摘要由CSDN通过智能技术生成

一、概述

进程之间通过管道来进行通讯是一种常用的方法,顾名思义,管道就是一端进(写)一端出(读)的FIFO队列,这个队列由内核管理,有一定大小(一般是4k),有文章上提到,如果需要修改该缓存区,需要重新编译内核(修改linux/limits.h里PIPE_BUF的定义)。

需要明确的是,虽然管道在理论上是双向的,但实际应用时,为避免复杂,都单向来用,需要双向通讯时,采用两个管道进行。

具有亲缘关系的进程可以采用匿名管道,没有亲缘关系的进程采用命名管道,本文以命名管道为主进行讨论。

二、有关的管道函数

创建管道

int mkfifo(const char * pathname,mode_t mode);

打开管道

int open(const char *pathname,int oflag,... /* mode_t mode */);

读写

int read(int handle, void *buf, int nbyte)

int write(int handle, void *buf, int nbyte)

关闭

Close(int handle)

这些函数都比较简单,不做深入说明。

三、阻塞和非阻塞

同文件、网络等一样,通过在open方法中是否设置O_NONBLOCK标志,管道操作有两种运行方式:阻塞和非阻塞模式。

1.      阻塞模式

阻塞模式下,无论是读端或写端,如果对方没有打开,open都会阻塞,而write和read

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值