消息队列现在有两种,系统V消息队列和POSIX消息队列。
系统V消息队列是随内核持续的,只有内核重启或者人工删除才会被删除!
每个消息队列在系统范围内都有唯一的键值!
#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(char *pathname, char proj)
proj是项目名, 不为0即可!
打开/创建
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgget(key_t key, int mskflg)
key值由ftok获得,
msg:
IPC_CREAT 创建新的消息队列
IPC_EXCL 与IPC_CREAT一同食用,如果队列已经存在会返回错误
IPC_NOWAIT读写消息队列的时候,读不到不会等待
发送
int msgsnd(int msqid, const void *ptr, size_t nbytes, int flags);
ptr指向一个长整型数, 最长消息是512个字节,
结构如下:
struct mymesg{
long mtype;
chhar mtext[512];
};
取出消息
size_t msgrev)int msqid, void *ptr, size_t nbytes, long types, int flag)
垃圾桶函数:
int msgctl(int msqid , int cmd, struct msqid_ds *buf);
cmd参数说明对msqid指定的队列要执行的命令
IPC_STAT 取此队列的msqid_ds结构,然后放到buf中去。
IPC_RMID 从系统中删除这个消息队列以及其参数