开发环境
Red Hat Enterprise Linux Server release 7.0 (Maipo)
参考书籍
《UNIX环境高级编程》
关于消息队列知识的编程应用:
https://blog.csdn.net/qq_42418668/article/details/95192660
消息队列
消息队列时消息的链接表,存放在内核中并由消息队列标识符标识。
我们都知道每个运行的进程都有4G虚拟进程空间,其中包括3G的用户空间和1G的内核空间,内核空间是每个进程共享的空间。所以进程间的通讯便可以在内核空间“做文章”。即所谓,进程是独立的,必须要共享一些资源才可以通讯。
使用消息队列,进行进程间的通讯的理论基础就是不同进程可以访问同一内核对象。
消息队列可以将共享数据和类型一一对应起来,可以保证将特定类型的数据发送给特定的进程,从而保证了进程间通讯的有效性。
相关API的调用
msgget用于创建一个新队列或打开一个现存的队列。msgsnd将新消息添加到队列尾端。msgrcv用于从消息队列中取消息。
![](https://i-blog.csdnimg.cn/blog_migrate/a610e8f849a4167cc5340645b63e1746.png)
若执行成功,msgget返回非负队列ID。此后,该值就可用于其他三个消息队列函数。
msgctl函数对队列执行多种操作,它和另外俩个信号量和共享存储有关的函数(semctl和shmctl)是XSI IPC的类似于ioctl的函数。(垃圾桶函数)
删除内核对象
int msgctl(int msgid,int cmd,struct msgid_ds *buff);
ctl设置函数(修改,删除)
cmd:IPC_RMID
使用命令查看消息队列状态
ipcs -q 查看消息队列
ipcrm -q msqid删除消息队列