关于进程通信的消息队列相关函数

本文详细介绍了消息队列的基本操作,包括创建或打开消息队列、发送与接收数据的方法及参数说明,并解释了如何查看、设置及删除消息队列。


创建或者打开消息队列:

函数原型:int msgget(key_t key, int flag);

参数列表: key是创建队列的key值,可以为0,也可以通过ftok函数生成一个key值

flag是创建的消息队列的访问权限,一般为0777或者0666.

返回值: 成功返回消息队列的ID,失败返回-1。


-------------------------------------------------------------------------------------------------------------------------------------------------------


利用消息队列发送数据:

函数原型:int msgsnd(int msgid, const void *msgp, size_t size, int flag);

参数列表: msgid为消息队列的id号,也就是打开队列的id号

msgp为void*类型的指针,常用消息队列结构体,结构体需要包括消息类型以及消息正文,

size为发送消息正文的字节数,通常用sizeof()确定大小

flag为发送方式,0是阻塞方式发送,发送不成功一直等待。IPC_NOWAIT为非阻塞方式,若不成功

也会立即返回。

返回值: 成功返回0,失败返回-1。


--------------------------------------------------------------------------------------------------------------------------------------------------------

利用消息队列接收数据:

函数原型:int msgrcv(int msgid, void *msgp, size_t size, long msgtype, int flag);

参数列表: msgid为接受的消息队列id号

msgp为接受数据的存储地方,一般形式为消息队列结构体,包括消息类型和正文(正文需要与发送方的结构一致)。

size为要接受数据的字节数,通常用sizeof确定大小

msgtype为接受的消息类型,发送方的类型为100,接收方也要以100的类型来接收,便于多进程通信

flag是发送方式,IPC_NOWAIT是非阻塞方式,0为阻塞方式。

返回值: 成功返回0,失败返回-1.

-------------------------------------------------------------------------------------------------------------------------------------------------------------

查看、设置、删除消息队列:

函数原型:int msgctl(int msgid, int cmd, struct msgid_ds *buf);

参数列表: msgid为要操作的消息队列id号

cmd有三个,分别是IPC_STAT(读取属性)、IPC_SET(设置属性)、IPC_RMID(删除队列)

buf是消息队列缓冲区,类型为struct msgid_ds。在修改属性时,可以先定义这样的结构体,读取属性并存储,之后修改相应的

参数,再重新设置属性写进队列中。

返回值: 成功返回0,失败返回-1.


------------------------------------------------------------------------------------------------------------------------------------------------------------------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值