#include <mqueue.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
int main(int argc, char **argv) {
int c, flags;
mqd_t mqd;
flags = O_RDWR | O_CREAT;
while ( (c = getopt(argc, argv, "e")) != -1) {
switch(c) {
case 'e':
flags |= O_EXCL;
break;
}
}
if (optind != argc - 1) {
printf("usage: mqcreate [ -e ] <name>\n");
exit(1);
}
mqd = mq_open(argv[optind], flags, FILE_MODE, NULL);
if (mqd == -1) {
printf("mq_open error:%s %s\n", argv[optind],strerror(errno));
exit(1);
}
mq_close(mqd);
return 0;
}
編譯:
$:gcc mqcreate.c -omqcreate -lrt
執行:$:./mqcreate -e /temp.1234
提示:mq_open error:/test.1234 Permission denied
通過man 7 mq_overview可以查看到:
在Linux上,消息隊列是通過一個虛擬文件系統創建(其他系統也可能提供了一個類似的實現)。這個文件系統可以通過以下命令被掛載(root權限):
#mkdir /dev/mqueue
#mount -t mqueue none /dev/mqueue
mq_open的name被自動設置在掛載目錄(/dev/mqueue)。
在文件系統被掛載後,消息隊列就可以在系統上通過例如ls和rm這樣的命令查看,操作。
按照上面描述,掛載/dev/mqueue目錄後,就解決了。