进程通信笔记:无名管道,有名管道,消息队列,信号,信号量,共享内存

本文详细介绍了进程间的几种通信方式:无名管道适用于父子进程通信,有名管道能实现任意进程间高速通信,消息队列允许设置权限并存储结构化数据,信号用于通知进程事件发生,信号量用于资源访问控制,共享内存则提供直接的数据共享。每种机制都包括其工作原理和使用方法。
摘要由CSDN通过智能技术生成

无名管道:用于父子进程之间的通信
使用pipe()函数创建管道
在进程1中进行写操作,此时关闭读描述,使用write( pipes[1], &c, 1)将c内容写入pipes[1](pipe()中的读描述)。
此时管道中已由pipes[1]传入pipes[0],即在进程2中需要使用read(pipes[0],&c,1)将写入管道内的内容读出并赋值给地址c

有名管道:用于任何进程之间通信,传输速度较快,可达到10M每秒。
使用mkfifo(fifo_name, 0777)创建管道并赋予权限,此时fifo_name为管道文件,该方式是通过文件的方式进行传输,所以无论是传入还是传出,首先要使用open打开fifo_name文件,然后将需要传输内容写入fifo_name(write函数),或者从fifo_name中读取数据(read函数)。

消息队列:可以对其权限进行相关设置
首先,每个进程都需要通过msgget()函数建立一个消息队列,建立方法如下:
msgget((key_t)1234, 0666 | IPC_CREAT)
其中,第一个参数为消息队列的标识码,每个进程建立的消息队列的标识码必须相同

需要建立一个标准结构体,作为消息队列的缓冲区,如下:
struct msg_st
{
long int msg_type; //
char text[MAX_TEXT];
};
使用msgsnd()函数发送数据,若无接收,则一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值