• 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


  • 相关阅读:
    JS自定义功能函数实现动态添加网址参数修改网址参数值
    伍、ajax
    类的静态方法(函数)中为什么不能调用非静态成员(属性)?
    android 数据存储 SharePreferences 简单使用
    实现多线程的方式
    线程、进程概念与Android系统组件的关系
    通知—Notifications
    活动栏—Action Bar
    Android菜单—Menu
    对话框控件—Dialog
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218496.html
Copyright © 2020-2023  润新知