最近学习UNIX环境网络编程POSIX消息队列的时候发现一个问题,在mq_open的时候总会报Permission denied的错误。
查看mq_overview后才得以解决。
mq_overview原文描述如下:
Mounting the message queue file system
On Linux, message queues are created in a virtual file system. (Other
implementations may also provide such a feature, but the details are
likely to differ.) This file system can be mounted (by the superuser)
using the following commands:
# mkdir /dev/mqueue
# mount -t mqueue none /dev/mqueue
The sticky bit is automatically enabled on the mount directory.
After the file system has been mounted, the message queues on the sys‐
tem can be viewed and manipulated using the commands usually used for
files (e.g., ls(1) and rm(1)).
创建MQ的代码如下:
1 #include <unpipc.h> 2 3 int 4 main(int argc, char **argv) 5 { 6 int c, flags; 7 mqd_t mqd; 8 9 flags = O_RDWR | O_CREAT; 10 11 while ((c = Getopt(argc, argv, "e")) != -1) 12 { 13 switch (c) 14 { 15 case 'e': 16 flags |= O_EXCL; 17 break; 18 } 19 } 20 21 if (optind != argc - 1) 22 err_quit("usage: mqcreate [-e] <name>"); 23 24 mqd = Mq_open(argv[optind], flags, 0777, NULL); 25 Mq_close(mqd); 26 27 exit(0); 28 }