创建或者打开消息队列:
函数原型: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.
------------------------------------------------------------------------------------------------------------------------------------------------------------------