/*************************************************************************/
系统调用:msgget();
原型:intmsgget(key_t
key,int msgflg);
返回值:如果成功,返回消息队列标识符
如果失败,则返回-1:
errno=EACCESS(权限不允许)
EEXIST(队列已经存在,无法创建)
EIDRM(队列标志为删除)
ENOENT(队列不存在)
ENOMEM(创建队列时内存不够)
ENOSPC(超出最大队列限制)
/*************************************************************************/
发现应该是EACCESS错误,msgget包括创建或得到消息队列的功能,得到消息队列是得到key对应的队列ID,报无权限,有可能系统上有重复的非本用户下的队列,造成无权访问的问题。按照这个思路,我加了打印语句(不好的调试方式:>),输出了由ftok创建的key为:16941057,转成16进制得到:0x01028001,然后用linux下查看消息队列的命令:
ipcs -q|grep 8001 果然得到另外一个用户下的消息队列,现在问题转成了为什么key会重复问题,可以是如何根据目录生成的那?
查阅了资料发现:ftok 的原型声明为:
key_t
ftok( char * f