linux消息队列 java_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      可以手工删除某个消息队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值