c функция Open () - PullRequest
       46

c функция Open ()

1 голос
/ 18 апреля 2020

У меня возникли проблемы с пониманием аргументов в функции open, специально используемой в контексте создания выходного файла. Я не совсем понимаю роли флагов и прав доступа к файлам (2-й и 3-й аргументы в функции). Например, если у меня есть разрешение на файл 00200 (у пользователя есть разрешение на запись) и флаг O_RDONLY (только для чтения), то я могу прочитать файл или записать файл?

1 Ответ

3 голосов
/ 18 апреля 2020

Подпись open выглядит следующим образом:

 int open(const char *pathname, int flags, mode_t mode);

Существует три набора «разрешений» при воспроизведении: разрешения самого файла, флаги и режим.

Права доступа к самому файлу (например, 00200 означает, что писать может только пользователь) определяют, что операционная система позволяет программе делать.

Когда вы указываете флаги, вы указываете, что вы хотите сделать с файлом. Например, если файл доступен только для чтения (например, rwxr-xr-x, а вы не владелец), вам будет разрешено открыть файл с помощью O_RDONLY. Если вы попытаетесь открыть файл с помощью O_RDWR или O_WRONLY, вы получите ошибку EPERM (операция не разрешена) в errno.

Параметр mode имеет значение только тогда, когда вы создайте новый файл, например, когда вы открываете несуществующий файл 1 и указывается флаг O_CREAT. Файл создается в файловой системе, и его разрешения задаются mode & ~umask (подробнее см. man 2 umask).

1 Конечно, содержащий каталог должен существовать, и вы должны иметь права на запись + exe c для этого каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...