功能
msgrcv()可以从消息队列中读取消息,msgsnd()将一个新的消息写入队列。
头文件
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
函数原型
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
参数含义
msqid:消息队列的识别码
msgp:指向消息缓冲区的指针,此位置用来暂时存储发送和接收的消息,是一个用户可定义的通用结构,形态如下:
struct msgbuf {
long mtype; /* 消息类型,必须 > 0 */
char mtext[1]; /* 消息文本 */
};
msgsz:消息的大小
msgtyp:消息类型
msgtyp等于0 则返回队列的最早的一个消息。
msgtyp大于0,则返回其类型为msgtyp的第一个消息。
msgtyp小于0,则返回其类型小于或等于mtype参数的绝对值的最小的一个消息
msgflg:这个参数依然是控制函数行为的标志,取值可以是:0,表示忽略;IPC_NOWAIT,如果消息队列为空,则返回一个ENOMSG,并将控制权交回调用函数的进程。如果不指定这个参数,那么进程将被阻塞直到函数可以从队列中得到符合条件的消息为止。如果一个client 正在等待消息的时候队列被删除,EIDRM 就会被返回。如果进程在阻塞等待过程中收到了系统的中断信号
Linux C编程:System V消息队列使用(msgsnd & msgrcv)

本文介绍了Linux C语言中使用System V消息队列进行进程间通信的方法,包括msgsnd函数用于发送消息,msgrcv函数用于接收消息。详细阐述了函数的功能、所需的头文件、参数含义以及可能的返回值,帮助开发者理解如何在多进程环境中实现消息传递。
最低0.47元/天 解锁文章
2759

被折叠的 条评论
为什么被折叠?



