我有一个server.c程序,它使用以下权限初始化消息队列:
…struct mq_attr attr;attr.mq_flags = 0;attr.mq_maxmsg = MAX_MSGS;…
进程退出后,消息队列仍然存在。第二次创建尝试失败的原因是您将模式指定为 666 ,这导致相当奇怪的权限:
666
$ ls -l /dev/mqueue/serverqueue --w--wx--T. 1 fw fw 80 Feb 17 13:13 serverqueue
没有读取权限,因此打开 O_RDWR 失败。
O_RDWR
此外,由于队列名称是共享资源,因此如果使用创建队列,通常会导致安全漏洞 O_CREAT 代替 O_CREAT | O_EXCL 。另一个用户可能创建了具有不同权限的相同队列,因此可以访问您尝试对队列执行的操作。
O_CREAT
O_CREAT | O_EXCL