Какая связь между флагами и режимом в функции открытия файла в C - PullRequest
0 голосов
/ 17 декабря 2018

Я новичок в C, у меня есть вопрос о флагах и параметрах режима в функции открытия файла в C, поэтому функция открытия C выглядит так:

int open(char *filename, int flags, mode_t mode);

и некоторые макросы для флагов:

  • O_RDONLY: только чтение
  • O_WRONLY: только запись
  • O_RDWR: чтение и запись

иБит режима что-то вроде:

enter image description here

Что я не понимаю, скажем, у нас есть функция открытия как:

fd = Open("foo.txt", O_RDONLY, S_IWOTH);

поэтому O_RDONLY указывает, что мы можем только читать файл, но S_IWOTH указывает, что любой может написать этот файл, разве они не противоречат друг другу?

1 Ответ

0 голосов
/ 17 декабря 2018

Флаги определяют свойства, которые будут применены при открытии этого файла в это время (давайте назовем это "сессией") - это влияет на то, что вы можете делать с файломпока он открыт (или, точнее, то, что вы можете сделать с дескриптором файла).

Режим определяет свойства файла, если он будет создан как часть процесса открытия -это влияет на то, как каждый может открыть файл в будущем.

Ваш конкретный пример (хотя с правильным open вместо Open):

fd = open("foo.txt", O_RDONLY, S_IWOTH);

на самом деле не имеет значения, поскольку файл не будет создан без флага O_CREAT (a) .

Однако, если бы вы указали O_CREAT, этовполне приемлемо для создания файла, позволяющего кому-либо записывать в него, но открыть его для этого сеанса в режиме только для чтения.


(a) Некоторые системы имеют другие флаги, которые могут создавать файл при некоторых обстоятельствах.Например, Linux имеет флаг O_TMPFILE.

...