Я звоню mq_open
на linux 5.5.6
примерно так:
mq_open("/testing12345", O_RDWR | O_CREAT | O_NONBLOCK, 0777, & (struct mq_attr) {0, 10, 255, 0));
Обратите внимание, что я передал 0777
в качестве третьего аргумента.
Функция завершается успешно и создается соответствующий mqueue, после чего я монтирую файловую систему mqueue из своей оболочки:
mount -t mqueue none ./mqueue_dir
Однако, при определении узла нового mqueue выдается 0755
как биты доступа:
stat -c %a ./mqueue_dir/testing12345
0755
Почему это так? Я ясно передал константу 0777
при вызове mq_open.
Воспроизводимый пример
, скомпилированный с gcc -Wall -Werror -lrt a.c -o ./a
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <mqueue.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(void) {
const mqd_t descriptor = mq_open("/testing12345", O_RDWR | O_CREAT | O_NONBLOCK, 0777, & (struct mq_attr) {0, 10, 255, 0});
if(descriptor == -1) {
perror("parent: failed opening mqueue");
return EXIT_FAILURE;
}
sleep(30u);
mq_unlink("/testing123");
return EXIT_SUCCESS;
}