Права доступа к файлу mkfifo не выполняются правильно - PullRequest
6 голосов
/ 27 августа 2009

Следующая строка в моей C-программе должна предоставить All / Group / Owner права на чтение и запись

mkfifo("/tmp/dumbPipe", 0666)

Но как только я выполню код и проверим, что не установлены биты записи, я получаю

prw-r--r-- 

Владельцы одинаковые, это проблема, так как я создаю канал в каталоге tmp? Когда я запускаю chmod 666 из строки cmd, все права доступа устанавливаются правильно.

Ответы [ 2 ]

9 голосов
/ 27 августа 2009

Это сообщение без комментариев, просто цитирование руководств. Краткость и т. Д.

Цитата из человека 3 mkfifo:

Он изменяется с помощью umask процесса обычным способом: права доступа для создаваемого файла (mode & ~ umask).

Цитата из man 2 umask

Типичным значением по умолчанию для процесса umask является S_IWGRP | S_IWOTH (восьмеричное 022). В обычном случае, когда аргумент режима open (2) указывается как:

      S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH

  (octal 0666) when creating a new file, the permissions on the resulting file will be:

      S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH

  (because 0666 & ~022 = 0644; i.e., rw-r--r--).
0 голосов
/ 17 июля 2014

Сала, Я знаю, что уже поздно, но для других пользователей я хочу написать этот комментарий Даже если вы укажете 0666 как разрешение, вы должны знать, что есть еще один фактор, который называется «создание режима файла процесса», поэтому вопрос:

как изменить режим создания файла текущего процесса?

Ответ: используйте umask (разрешение) в начале вашей программы - и дайте 0000 как разрешение

http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

это должно помочь.

...