消息队列库<sys/msg.h>
相比于共享内存和管道,消息队列能够实现指定的消息格式和排序,能实现更复杂的通信
库函数
// 创建消息队列
int msgget(key_t, key, int msgflg);
return ID(成功) -1(错误)
key为一个标记内存的关键字,可用自己指定,也可以用ftok函数转文件名为key,
msgflg标志包括IPC_CREAT(创建)|IPC_EXCL(存在则报错)
//发送
int msgsnd(int msgid, const void *msg_ptr, size_t msg_sz, int msgflg);
return 0(成功) -1(错误)
msgflg标志: IPC_NOWAIT(消息队列已经满了立即返回不阻塞),MSG_NOERROR(超过限制长度截断)
msg_ptr指向的对象是一个结构体:
struct msg{
long int message_type; //队列需要的消息类别
//其他需要通信的数据类型
};
//接收
int msgrcv(int msgid, void *msg_ptr, size_t msg_st, long int msgtype,