linux——消息队列
消息队列是消息的链表存放在内核中一个消息队列由一个标识符队列ID来标识。1.特点消息队列是面向记录的其中的消息具有特定的格式以及特定的优先级消息队列独立于发送和接收进程进程终止时消息队列及其内容仍存在消息队列可以实现消息的随机查询消息不一定要先进先出的次序读取也可以按消息的类型读取。2、相关函数1.int msgget(key_t key, int msgflg); //创建或打开消息队列 参数 key:和消息队列关联的key值 msgflg是一个权限标志表示消息队列的访问权限它与文件的访问权限一样。msgflg可以与IPC_CREAT做或操作表示当key所命名的消息队列不存在时创建一个消息队列如果key所命名的消息队列存在时IPC_CREAT标志会被忽略而只返回一个标识符。 返回值成功返回队列ID失败则返回‐1#includestdio.h #include sys/types.h #include sys/ipc.h #include sys/msg.h #include stdlib.h int main() { int msgid; msgid msgget(IPC_PRIVATE,0755); if(msgid -1) { printf(creat message queue failed\n); return -1; } printf(creat message queue succeed! msgid %d\n,msgid); system(ipcs -q); return 0; }每执行一次就会多创建一个4.int msgctl(int msqid, int cmd, struct msqid_ds *buf); //控制消息队列成功返回0失败返回‐1 参数 msqid消息队列的队列ID cmd IPC_STAT把msgid_ds结构中的数据设置为消息队列的当前关联值即用消息队列的当前关联值覆盖msgid_ds的值。 IPC_SET如果进程有足够的权限就把消息列队的当前关联值设置为msgid_ds结构中给出的值 IPC_RMID删除消息队列 buf是指向 msgid_ds 结构的指针它指向消息队列模式和访问权限的结构 返回值 成功0 失败‐1#includestdio.h #include sys/types.h #include sys/ipc.h #include sys/msg.h #include stdlib.h int main() { int msgid; msgid msgget(IPC_PRIVATE,0755); if(msgid -1) { printf(creat message queue failed\n); return -1; } printf(creat message queue succeed! msgid %d\n,msgid); system(ipcs -q); msgctl(msgid,IPC_RMID,NULL); system(ipcs -q); return 0; }这段代码是先创建然后又删除了#includestdio.h #include sys/types.h #include sys/ipc.h #include sys/msg.h #include stdlib.h int main() { msgctl(0,IPC_RMID,NULL); system(ipcs -q); return 0; }这样就指定删除了id为0的队列