"); //-->
作者:曾宏安,华清远见嵌入式学院高级讲师。
无名管道又被称为pipe,是进程间通信的一种方式。pipe具有以下特点:
●只能用于具有血缘关系的进程之间
●半双工的通信模式,具有固定的读端和写端
●一种特殊的文件,存在于内存中。可通过read、write对其操作
因为pipe存在于内存中,所以无法像操作普通文件那样通过指定路径来打开文件。通常的做法是在父进程中创建管道,再创建子进程。由于子进程继承了父进程打开的文件描述符,所以父子进程就可以通过创建的管道进行通信。
为了在父进程中创建管道,需要先定义一个包含两个元素的整型数组,用来存放管道读端和写端对应的文件描述符。该数组在创建管道时作为参数传递。要注意的是,管道是一种半双工方式,即对于进程来说,要么只能读管道,要么只能写管道。不允许对管道又读又写。
其中数组的第一个元素固定代表管道的读端,第二个元素代表管道的写端。对于一个进程来说,只会用到其中一个。
若读取管道时没有数据,则进程会被阻塞,直到有数据可读。写管道时除非管道已满,一般情况下写入操作很快会返回。
这里假设父进程读管道,子进程写管道。参考代码如下所示:
int pfd[2];
pid_t pid;
if ( pipe(pfd) < 0 ) // 创建管道失败
{
perror(“fail to create pipe : ”);
exit(-1);
}
if ( (pid=fork()) == -1 ) // 创建子进程失败
{
perror(“fail to create child process : ”);
exit(-1);
}
else if ( pid == 0 ) // 子进程
{
close(pfd[0]); // 子进程关闭读端
……
写管道
……
}
else // 父进程
{
close(pfd[1]); // 父进程关闭写端
……
读管道
……
}
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
PGA206/207 高速可编程增益仪表放大器
英飞凌全桥变压器驱动器评估板!
安森美十大热门应用框图,一文吃透
容错的CAN 收发器应用指南PCA82C252_ TJA1053 _TJA1054_ TJA1054A
CodeWarrior 使用教程(中文的)
转贴:上千个常用集成电路应用索引
uclinux ,execve(\"/bin/init\")死锁了,help
转贴:上千个常用集成电路应用索引
由MAX4102/4103构成的视频/射频分配放大电路
CES 2010:WiFi充电器 利用无线信号为手机充电
CES 2010:3D 电视
艾迈斯欧司朗推出专为智能眼镜优化的紧凑型RGGB LED解决方案
DOM:全自主智能机器人设计与实现
uclinux ,起来一半死锁了,help
年终盘点:英飞凌2025年碳化硅领域重磅产品与技术惊艳亮相
如何为keil c51编写自己DDE接口
东芝推出适用于工业设备过流检测的高速响应、I/O全范围双通道比较器(CMOS)
CES 2010:XSTREAMHD 展位的演示视频
CES 2010:enTourage正式发布双屏电子书eDGe
由MAX4102/4103构成的单位增益缓冲器电路
实时时钟电路MC146818A与单片机的接口及编程
CES 2010:外星人...Alienware M11X 推出
MAX4104/4105/4304/4305低噪声低失真运算放大器
QDPAK顶部散热封装简介
深入浅出LPC9401 Flash 单片机
源来如此 | 1kW 高密度 LLC 电源模块中使用的平面变压器概述
由MAX4102/4103构成的同相增益电路
实用单片机系统
低压大电流应用中的电压调节器性能该如何改进?
顶部散热封装QDPAK安装指南