木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java3年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql4年进入店铺

linux 消息队列使用经验

概述:

消息队列是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


posted @ 2013-05-06 23:38  C语言程序  阅读(2247)  评论(0编辑  收藏  举报
木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java3年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql4年进入店铺