creat(), creat64()

Создать и открыть файл (на низком уровне)

Прототип:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int creat( const char *path,
mode_t mode );
int creat64( const char *path,
mode_t mode );

Аргументы:

path
Путь к файлу, который нужно открыть.
mode
Права доступа, которые необходимо использовать. Для дополнительной информации смотрите struct stat.

Библиотека:

libc

Описание:

Функции creat() и creat64() создают и открывают файл, определяемый path, в режиме mode.

Вызов creat() представляет собой:

open( path, O_WRONLY | O_CREAT | O_TRUNC, mode );

Аналогично, вызов creat64() представляет собой:

open64( path, O_WRONLY | O_CREAT | O_TRUNC | O_LARGEFILE, mode );

Если path существует и доступен для записи, файл усекается, чтобы не содержать данных, а существующая опция mode не изменяется.

Если path не существует, файл создается с правами доступа, указанными в аргументе mode. Права доступа для файла или директории определяются комбинацией битов, опеределенных в <sys/stat.h>.

Возвращаемое значение:

Файловый дескриптор. Если возникла ошибка, функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EACCES
Одна из следующих проблем с правами:
EBADFSYS
Во время попытки открыть path сам файл или часть его пути были повреждены. Системный сбой, который невозможно исправить автоматически, возник во время обновления директории или записи файла. Файловая система должна быть восстановлена перед продолжением операции.
EBUSY
Файл, определяемый path, является блочным специальным устройством, которое уже открыто для записи, либо path определяет файл в файловой системе, смонтированной на блочное специальное устройство, которое уже открыто для записи.
EINTR
Вызов creat() был прерван сигналом.
EISDIR
Файл, определяемый path, является директорией, и флаги создания файла определяют право только на запись или чтение/запись.
ELOOP
Слишком большой уровень символических ссылок.
EMFILE
Процесс использует слишком много файловых дескрипторов.
ENAMETOOLONG
Длина path превышает PATH_MAX, либо часть пути превышает NAME_MAX.
ENFILE
В системе открыто слишком много файлов в данный момент.
ENOENT
Либо префикс пути не существует, либо аргумент path указывает на пустую строку.
ENOSPC
Директория или файловая система, которая будет содержать новый файл, не имеет достаточно места для создания нового файла.
ENOSYS
Функция creat() не реализована для файловой системы, содержащей path.
ENOTDIR
Часть префикса пути не является директорией.
EROFS
Файл, определяемый path, расположен в файловой системе, доступной только для чтения.

Примеры:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main( void )
{
int filedes;
filedes = creat( "file", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );
if ( filedes != -1 )
{
/* process file */
close( filedes );
return (EXIT_SUCCESS);
}
return (EXIT_FAILURE);
}

Классификация:

creat() — POSIX 1003.1; creat64() — Поддержка больших файлов

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

chsize(), close(), dup(), dup2(), eof(), errno, execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), fcntl(), fileno(), fstat(), isatty(), lseek(), open(), read(), sopen(), stat(), tell(), write(), umask()




Предыдущий раздел: Описание API системной библиотеки