进行异常退出,创建了消息队列,再启进进程时,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"")}'
来源如下网页