Использование open() для создания файла в C

Это первый раз, когда я использую open() от:

#include <fcntl.h>

Я пытаюсь создать два файла:

int fd;
int fd2;
char *tmpname = "./TMPFILE";
printf( "Temporary file created\n ");
char *tmpname2 = "./TMPFILE2";
printf( "Temporary file two created\n ");
fd = open(tmpname, O_WRONLY | O_APPEND);
fd2 = open(tmpname2, O_WRONLY | O_APPEND);

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

Это компилируется и запускается, но меня беспокоит то, что, когда я проверяю свой каталог, чтобы увидеть, были ли файлы созданы, они не перечислены.

Мой вопрос open() делать только временные файлы, которые удаляются после запуска программы или я что то испортил?

1 ответ

Решение

При создании файла вам нужно открыть третий параметр (mode). Если вы этого не сделаете, произойдут непредсказуемые вещи.

Кроме того, если вы хотите создать файл, если его там нет, вам понадобится O_CREAT или в, т.е.

fd = open(tmpname, O_WRONLY | O_APPEND | O_CREAT, 0644);

O_CREAT (грубо говоря) создает файл, если его нет.

Со страницы руководства:

НАЗВАНИЕ
       открыть, создать - открыть и, возможно, создать файл или устройство

СИНТАКСИС
       #включают 
       #включают 
       #включают 

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

       int creat(const char *pathname, mode_t mode);

...
       O_CREAT
              Если файл не существует, он будет создан. Владелец (идентификатор пользователя)
              файл настроен на эффективный идентификатор пользователя процесса. Группа
              владение (идентификатор группы) устанавливается равным эффективному идентификатору группы
              процесс или идентификатор группы родительского каталога (в зависимости от
              тип файловой системы и параметры монтирования, а также режим родительского
              посмотрите параметры монтирования bsdgroups и sysvgroups, описанные в
              крепление (8)).

              mode определяет разрешения для использования в случае создания нового файла.
              Этот аргумент должен быть указан, когда в флагах указан O_CREAT; если
              O_CREAT не указывается, тогда режим игнорируется. Эффективное разрешение
              Они изменяются с помощью umask процесса обычным способом:
              Задачи созданного файла: (режим & umask). Обратите внимание, что этот режим
              применяется только к будущему доступу к вновь созданному файлу; Открыто()
              вызов, который создает файл только для чтения, вполне может вернуть файл для чтения / записи
              дескриптор.
Другие вопросы по тегам