概述:
消息队列是linux下进程间通信的一种方式,一般用于传送少量数据,如果大量数据需要在进程间共享,则可以用共享内存。
函数接口使用:
linux下提供了以下几个接口,用于消息队列的使用,使用一般过程如下:
1. 调用ftok接口产生一个key.
使用ftok的好处是,访问同一个消息队列的不同进程可以通过同一个文件访问相同的队列.
另外,如果文件被删除,即使重新产生后内容一模一样,仍然可能产生不同的key ,因为文件的inode与key值的产生有关。
2. 调用msgget(使用key作为参数)产生一个队列
3. 进程可以用msgsnd发送消息到这个队列,相应的别的进程用 msgrcv读取。
这里需要注意msgsnd可能会失败的两个情况:
a) 阻塞方式下可能被信号打断(包括msgsnd和msgrcv), 此时会直接返回. 尤其是大流量应用中更容易出现.
安全的用法是判断操作是否被信号打断(errno为EINTR),如果被打断,则需要继续尝试。
b) 消息队列满
产生这个错误,则需要考虑提高系统消息队列规格,或者查看消息接收处是否有问题
4. msgctl函数可以用来删除消息队列
消息队列产生之后,除非明确的删除(可以用),产生的队列会一直保留在系统中。linux下消息队列的个数是有限的,注意不要泄露。如果使用已经达到上限,msgget调用会失败,产生的错误码对应的提示信息为no space left on device.
相关命令行接口:
可以使用ipcs, 以及ipcrm命令进行验证,诊断。
ipcs -q -l 列出当前系统消息队列规格配置
ipcs -q 列出当前系统消息队列的简单使用情况
ipcs -q -u 列出当前系统消息队列的详细使用情况
ipcrm 可以手工删除某个消息队列
原文地址:http://blog.csdn.net/houruizheng/article/details/5618363