消息队列:
基本特点:是由内核负责维护管理的数据链表,通过消息类型收发数据。
int msgget(key_t key, int msgflg);
功能:创建/获取消息队列
key:IPC键值
msgflg:
IPC_CREAT 创建消息队列
IPC_EXCL 如果消息队列已经存在则返回错误
mode_flags:创建消息队列时需要提供权限
返回值:成功返回IPC标识符,错误返回-1。
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
功能:向消息队列发送数据
msqid:IPC标识符
msgp:要发送的消息的首地址
struct msgbuf {
long mtype; // 消息类型
char mtext[5]; // 数据
};
msgsz:数据的字节数,不包含消息类型。
msgflg:
阻塞一般写0。
IPC_NOWAIT 当消息队列满时,不等待立即返回。
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
功能:从消息队列中读取数据
msqid:IPC标识符
msgp:存储数据结构首地址
msgsz:结构体的字节数
msgtyp:消息类型
>0 读取消息类型等于msgtyp的消息。
=0 读取消息队列第一条消息。
<0 读取消息类型小于abs(msgtyp)的消息,如果有多个则读取最小的。
msgflg:
IPC_NOWAIT 消息类型不符合时不阻塞,立即返回。
MSG_EXCEPT 如果msgty