Подпись 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 для этого каталога.