Создайте файл в Linux с помощью C

Я пытаюсь создать файл только для записи в C на Linux (Ubuntu). Это - мой код:

 int fd2 = open ("/tmp/test.svg", O_RDWR|O_CREAT);

 if (fd2 != -1) {
   //....
 }

Но почему делают файлы, которые я создал, имеют 'xr' режим? Как я могу создать его так, чтобы я мог открыть его сам в командной строке?

------xr--  1 michael michael  55788 2010-03-06 21:57 test.txt*
------xr--  1 michael michael   9703 2010-03-06 22:41 test.svg*
21
задан Jonathan Leffler 8 October 2013 в 00:29
поделиться

1 ответ

Вам нужна трехаргументная форма open() когда вы указываете O_CREAT. Когда вы опускаете третий аргумент, open() использует любое значение, которое окажется на стеке, где ожидался третий аргумент; это редко бывает последовательный набор разрешений (в вашем примере, похоже, что на стеке было десятичное 12 = восьмеричное 014).

Третий аргумент - это разрешения на файл, которые будут изменены значением umask().

int fd2 = open("/tmp/test.svg", O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH);

Обратите внимание, что вы можете создать файл без прав на запись (для кого-либо другого или любого другого процесса) и при этом иметь возможность писать в него из текущего процесса. Редко возникает необходимость использовать биты execute для файлов, созданных из программы - если только вы не пишете компилятор (а файлы '.svg' обычно не являются исполняемыми!).

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

Обратите внимание, что фиксированное имя файла и отсутствие защитных опций, таких как O_EXCL, делают даже пересмотренный вызов open() несколько небезопасным.

35
ответ дан 29 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: