进程间通信——消息队列msgget 返回失败(项目中遇到的小问题)

进行异常退出,创建了消息队列,再启进进程时,msgget返回失败,perror得出结果为Permision denied。

由于消息队列创建了,若进行异常队列,并未处理,故再启动时失败。

可用ipcs命令查看当前消息队列。

另外,2种方案解决:

1、重启系统(太野蛮了,但开始我就是这么解决的)

2、先删除消息

     1)代码中删除参考代码如下 :msgctl(qid,   IPC_RMID,   0); (未测试)

     2)命令删除:  ipcrm -q msgid

 

还有,创建时,需要指定权限,如 msgget (key, IPC_CREAT | 0666);  注意,是0666,不是0x666,相关资料可以看这个帖子

http://linux.chinaunix.net/bbs/viewthread.php?tid=912698

 

删除消息的脚本,

有如下:ipcs -q | grep '^[0-9]' | awk '{system("ipcrm msg "$2"")}'

来源如下网页

http://bbs.chinaunix.net/viewthread.php?tid=155580

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值