【发布时间】:2014-05-11 21:30:21
【问题描述】:
我正在尝试从特权进程创建一个 POSIX 消息队列(等待稍后读取),然后从非特权进程打开此消息队列(以发送消息),稍后 mq_open() 返回:EACCES。
如果创建进程和打开进程都是特权或都是非特权,mq_open 会成功。
我查看了 mq_open 手册,它说 EACCES 表示调用者没有权限以指定模式打开它,但我不确定什么是“指定模式”...
在特权进程中创建成功:
struct mq_attr attr;
attr.mq_flags = O_RDONLY;
attr.mq_maxmsg = 10;
attr.mq_msgsize = 1024;
attr.mq_curmsgs = 0;
mq_open("/myMq", (O_RDONLY| O_CREAT), (S_IRWXU | S_IRWXG | S_IRWXO) /* 777 */, &attr);
在非特权进程中打开失败:
mqd_t mqd;
mqd = mq_open("/myMq", (O_WRONLY|O_NONBLOCK));
if ((mqd_t)-1 == mqd) {
printf("mq_open %d %s\n", errno, strerror(errno)); }
它给出了错误:mq_open 13 Permission denied
我使用的是 CentOS 6.5 64 位
uname -r
2.6.32-431.el6.x86_64
你能帮我找出问题所在吗?提前致谢。
【问题讨论】:
标签: c linux posix message-queue