Создайте файл в 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* 

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

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

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

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

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

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

Предоставьте разрешения доступа в качестве третьего параметра:

 int fd2 = open("/tmp/test.svg", O_RDWR|O_CREAT, 0777); // Originally 777 (see comments) if (fd2 != -1) { // use file descriptor close(fd2); } 

Делая это, все права на чтение, запись и выполнение будут предоставлены пользователю, группе и другим. Измените третий параметр в соответствии с вашим использованием.