消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法(仅局限于本机);
每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值.
消息队列也有管道一样的不足: (1)每个消息的最长字节数的上限(MSGMAX); (2)系统中消息队列的总条数也有一个上限(MSGMNI); (3)每个消息队列所能够保存的总字节数是有上限的(MSGMNB) .
查看系统限制
cat /proc/sys/kernel/msgmax #最大消息长度限制
cat /proc/sys/kernel/msgmnb #消息队列总的字节数
cat /proc/sys/kernel/msgmni #消息条目数

管道 vs. 消息队列
管道
消息
流管道
有边界
先进先出
可以后进先出
消息队列在内核中的表示
消息在消息队列中是以链表形式保存的, 每个节点的类型类似如下:
msgget
功能:用来创建和访问一个消息队列
参数:
key: 某个消息队列的名字
msgflg:由九个权限标志构成,如0644,它们的用法和创建文件时使用的mode模式标志是一样的(但是消息队列没有x(执行)权限)
返回值:
成功返回消息队列编号,即该消息队列的标识码;失败返回-1
msgget调用关系图
msgctl函数
功能:获取/设置消息队列的信息
msqid: 由msgget函数返回的消息队列标识码
cmd:是将要采取的动作(见下)
cmd:将要采取的动作(有三个可取值),分别如下:
附-查看系统中的IPC对象
ipcs
删除消息队列
ipcrm -q [msqid]
或 ipcrm -Q [key] #如果key不等于0的话