Функция open в си

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

fopen – открытие потока данных.

#include
FILE *fopen (const char *filename, const char *mode);

filename – указатель на строку содержащую имя (включая путь) открываемого файла.
mode – указатель на строку содержащую режим доступа к открытому файлу.

Указатель на управляющую таблицу открытого потока данных, если открытие файла произошло успешно.

NULL – если при открытии файла произошла ошибка. В переменную errno будет записан код ошибки.

Функция fopen открывает файл, указанный аргументом filename с режимом доступа, указанным в аргументе mode и связывает с открытым файлом поток данных.

Предусмотрены следующие режимы доступа к открытому файлу:

r или rb – открытие файла для чтения. Если файла не существует, работа программы завершиться с ошибкой.

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

a или ab – открыть файл для записи в конец файла, если файла не существует, он будет создан.

r+ или rb+ или r+b – открыть файл для чтения и записи. Если файла не существует, работа программы завершиться с ошибкой.

w+ или wb+ или w+b – создать файл для чтения и записи, если файл уже существует, он будет открыт, но все имеющиеся в файле данные будут уничтожены.

a+ или ab+ или a+b – открыть файл для записи в конец файла, если файла не существует, он будет создан.

В примере создается файл для записи с именем test.txt, располагающейся в папке myfile (папка создана до запуска программы и располагается в директории, из которой запускается программа) и в файл записывается строка «Тест записи в файл». Затем файл закрывается. Отчет о работе выводится на консоль.

Вывод на консоль:

Открытие файла: выполнено
Запись в файл выполнена
Файл закрыт

Функция ореn() является частью UNIX-подобной системы ввода/вывода и не определена в стан­дарте ANSI С.

В отличие от буферизированной системы ввода/вывода в UNIX-подобной системе предпочте­ние отдается использованию дескрипторов файлов типа int, а не указателей на FILE. Функция ореn() открывает файл с именем filename и устанавливает режим доступа к нему в соответствии со значением аргумента access. Аргумент access представляет собой комбинацию основного режима доступа и модификаторов.

Base Значение
O_RDONLY Открыть только для чтения
O_WRONLY Открыть только для записи
O_RDWR Открыть для чтения/записи

Выбрав одно из этих значений, можно объединить его, используя ИЛИ, с одним или большим количеством следующих модификаторов доступа:

Модификаторы доступа Значение
O_NDELAY Не используется; включен для совместимости с UNIX
O_APPEND Заставляет указатель файла переместиться в конец файла перед каждой операцией записи
O_CREAT Если файл не существует, создает его с атрибутами, установленными в соответствии со значением mode
O_TRUNC Если файл существует, урезает его до длины 0, но сохраняет атрибуты файла
O_EXCL При использовании с O_CREAT не будет создавать выходной файл, если файл с таким именем уже существует
O_BINARY Открывает двоичный файл
O_ТЕХТ Открывает текстовый файл

Аргумент mode требуется только при использовании модификатора O_CREAT. В этом случае mode может принимать одно из трех значений:

Mode Значение
S_IWRITE Доступ по записи
S_IREAD Доступ по чтению
S_IWRITE | S_IREAD Доступ по чтению/записи

В случае успеха ореn() возвращает положительное целое число, являющееся дескриптором откры­того файла. Возврат —1 означает, что файл не может быть открыт. В этом случае errno устанавли­вается в одно из следующих значений:

ENOENT Файл не существует
EMFILE Слишком много открытых файлов
EACCESS Доступ запрещен
EINVACC Недействительный код доступа

Функция _rtl_open() имеет большее количество модификаторов режима доступа при работе под управлением Windows. Возможны следующие добавочные значения:

Открывает файл. Opens a file. Эти функции являются устаревшими, так как доступны более надежные и безопасные версии. См. описание _sopen_s, _wsopen_s. These functions are deprecated because more-secure versions are available; see _sopen_s, _wsopen_s.

Синтаксис Syntax

Параметры Parameters

filename filename
Имя файла. File name.

офлаг oflag
Разрешенные типы операций. The kind of operations allowed.

пмоде pmode
Режим разрешений. Permission mode.

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

Каждая из этих функций возвращает дескриптор файла для открытого файла. Each of these functions returns a file descriptor for the opened file. Возвращаемое значение, равное-1, указывает на ошибку; в этом случае для параметра «возврат » задано одно из следующих значений. A return value of -1 indicates an error; in that case errno is set to one of the following values.

Читайте также:  Как определить цену деления амперметра вольтметра ваттметра
Значение errno errno value Условие Condition
EACCES EACCES Попытка открыть для записи файл, доступный только для чтения; запрет указанных операций режимом общего доступа к файлу или "данный путь является каталогом". Tried to open a read-only file for writing, file’s sharing mode does not allow the specified operations, or the given path is a directory.
EEXIST EEXIST Указаны флаги _O_CREAT и _O_EXCL , но имя файла уже существует. _O_CREAT and _O_EXCL flags specified, but filename already exists.
EINVAL EINVAL Недопустимый аргумент офлаг или пмоде . Invalid oflag or pmode argument.
EMFILE EMFILE Больше нет доступных дескрипторов файлов (открыто слишком много файлов). No more file descriptors are available (too many files are open).
ENOENT ENOENT Файл или путь не найден. File or path not found.

Дополнительные сведения об этих и других кодах возврата см. в разделе errno, _doserrno, _sys_errlist и _sys_nerr. For more information about these and other return codes, see errno, _doserrno, _sys_errlist, and _sys_nerr.

Примечания Remarks

Функция _open открывает файл, указанный параметром filename , и подготавливает его для чтения или записи, как указано в офлаг. The _open function opens the file specified by filename and prepares it for reading or writing, as specified by oflag. _wopen — это версия _openдля расширенных символов; Аргумент filename для _wopen является строкой расширенных символов. _wopen is a wide-character version of _open; the filename argument to _wopen is a wide-character string. в противном случае _wopen и _open ведут себя одинаково. _wopen and _open behave identically otherwise.

Сопоставления подпрограмм обработки обычного текста Generic-Text Routine Mappings

Процедура Tchar.h Tchar.h routine _UNICODE и _MBCS не определены _UNICODE and _MBCS not defined _MBCS определено _MBCS defined _UNICODE определено _UNICODE defined
_topen _topen _open _open _open _open _wopen _wopen

офлаг — это целочисленное выражение, сформированное на основе одной или нескольких следующих констант манифеста или сочетаний констант, . oflag is an integer expression formed from one or more of the following manifest constants or constant combinations, which are defined in .

Константа офлаг oflag constant Поведение Behavior
_O_APPEND _O_APPEND Перемещает указатель файла в конец файла перед каждой операцией записи. Moves the file pointer to the end of the file before every write operation.
_O_BINARY _O_BINARY Открывает файл в двоичном режиме (без преобразования). Opens the file in binary (untranslated) mode. (Описание двоичного режима см. в разделе fopen.) (See fopen for a description of binary mode.)
_O_CREAT _O_CREAT Создает файл и открывает его для записи. Creates a file and opens it for writing. Не действует, если файл, указанный параметром filename , существует. Has no effect if the file specified by filename exists. Аргумент пмоде является обязательным, если указан параметр _O_CREAT . The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_SHORT_LIVED _O_CREAT | _O_SHORT_LIVED Создает файл в качестве временного файла и, по возможности, не сбрасывает его на диск. Creates a file as temporary and if possible does not flush to disk. Аргумент пмоде является обязательным, если указан параметр _O_CREAT . The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_TEMPORARY _O_CREAT | _O_TEMPORARY Создает файл в качестве временного файла; файл удаляется при закрытии последнего дескриптора файла. Creates a file as temporary; the file is deleted when the last file descriptor is closed. Аргумент пмоде является обязательным, если указан параметр _O_CREAT . The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_EXCL _O_CREAT | _O_EXCL Возвращает значение ошибки, если файл, указанный параметром filename , существует. Returns an error value if a file specified by filename exists. Применяется только при использовании с _O_CREAT. Applies only when used with _O_CREAT.
_O_NOINHERIT _O_NOINHERIT Предотвращает создание общего дескриптора файла. Prevents creation of a shared file descriptor.
_O_RANDOM _O_RANDOM Указывает, что кэширование оптимизировано для случайного доступа с диска, но не ограничивается им. Specifies that caching is optimized for, but not restricted to, random access from disk.
_O_RDONLY _O_RDONLY Открывает файл только для чтения. Opens a file for reading only. Нельзя указывать с помощью _O_RDWR или _O_WRONLY. Cannot be specified with _O_RDWR or _O_WRONLY.
_O_RDWR _O_RDWR Открывает файл для чтения и записи. Opens a file for both reading and writing. Нельзя указывать с помощью _O_RDONLY или _O_WRONLY. Cannot be specified with _O_RDONLY or _O_WRONLY.
_O_SEQUENTIAL _O_SEQUENTIAL Указывает, что кэширование оптимизировано для последовательного доступа с диска, но не ограничивается им. Specifies that caching is optimized for, but not restricted to, sequential access from disk.
_O_TEXT _O_TEXT Открывает файл в текстовом режиме (с преобразованием). Opens a file in text (translated) mode. (Дополнительные сведения см. в разделах Файловый ввод-вывод в текстовом и двоичном режиме и fopen.) (For more information, see Text and Binary Mode File I/O and fopen.)
_O_TRUNC _O_TRUNC Открывает файл и обрезает его до нулевой длины; необходимо разрешение на запись в файл. Opens a file and truncates it to zero length; the file must have write permission. Нельзя указывать с помощью _O_RDONLY. Cannot be specified with _O_RDONLY. _O_TRUNC , используемый с _O_CREAT , открывает существующий файл или создает файл. _O_TRUNC used with _O_CREAT opens an existing file or creates a file. Примечание. Флаг _O_TRUNC уничтожает содержимое указанного файла. Note: The _O_TRUNC flag destroys the contents of the specified file.
_O_WRONLY _O_WRONLY Открывает файл только для записи. Opens a file for writing only. Нельзя указывать с помощью _O_RDONLY или _O_RDWR. Cannot be specified with _O_RDONLY or _O_RDWR.
_O_U16TEXT _O_U16TEXT Открывает файл в режиме Юникода UTF-16. Opens a file in Unicode UTF-16 mode.
_O_U8TEXT _O_U8TEXT Открывает файл в режиме Юникода UTF-8. Opens a file in Unicode UTF-8 mode.
_O_WTEXT _O_WTEXT Открывает файл в режиме Юникода. Opens a file in Unicode mode.
Читайте также:  C builder community edition

Чтобы указать режим доступа к файлу, необходимо указать либо _O_RDONLY, _O_RDWR, либо _O_WRONLY. To specify the file access mode, you must specify either _O_RDONLY, _O_RDWR, or _O_WRONLY. Для режима доступа нет значения по умолчанию. There is no default value for the access mode.

Если _O_WTEXT используется для открытия файла для чтения, _open считывает начало файла и проверяет метку порядка байтов (BOM). If _O_WTEXT is used to open a file for reading, _open reads the beginning of the file and checks for a byte order mark (BOM). Если метка есть, файл обрабатывается как UTF-8 или UTF-16LE, в зависимости от значения метки. If there is a BOM, the file is treated as UTF-8 or UTF-16LE, depending on the BOM. Если метка порядка байтов есть, файл обрабатывается как ANSI. If no BOM is present, the file is treated as ANSI. При открытии файла для записи с помощью _O_WTEXTиспользуется UTF-16. When a file is opened for writing by using _O_WTEXT, UTF-16 is used. Независимо от любых предыдущих параметров или метки порядка байтов, если используется _O_U8TEXT , файл всегда открывается как UTF-8; Если используется _O_U16TEXT , файл всегда открывается как UTF-16. Regardless of any previous setting or byte order mark, if _O_U8TEXT is used, the file is always opened as UTF-8; if _O_U16TEXT is used, the file is always opened as UTF-16.

Когда файл открывается в режиме Юникода с помощью _O_WTEXT, _O_U8TEXTили _O_U16TEXT, входные функции преобразуют данные, считанные из файла, в данные UTF-16, хранящиеся как тип wchar_t. When a file is opened in Unicode mode by using _O_WTEXT, _O_U8TEXT, or _O_U16TEXT, input functions translate the data that’s read from the file into UTF-16 data stored as type wchar_t. Функции, записывающие в файл, Открытый в режиме Юникода, предполагают буферы, содержащие данные UTF-16, хранящиеся как тип wchar_t. Functions that write to a file opened in Unicode mode expect buffers that contain UTF-16 data stored as type wchar_t. Если кодировка файла — UTF-8, при его записи данные UTF-16 преобразуются в UTF-8, а содержимое файла с кодировкой UTF-8 преобразуется в данные UTF-16 при его считывании. If the file is encoded as UTF-8, then UTF-16 data is translated into UTF-8 when it is written, and the file’s UTF-8-encoded content is translated into UTF-16 when it is read. Попытка чтения или записи нечетного числа байт в режиме Юникода приводит к возникновению ошибки проверки параметра. An attempt to read or write an odd number of bytes in Unicode mode causes a parameter validation error. Для чтения или записи данных, хранимых в программе в кодировке UTF-8, используйте режим текстового или двоичного файла вместо режима Юникода. To read or write data that’s stored in your program as UTF-8, use a text or binary file mode instead of a Unicode mode. Вам необходимо реализовать все обязательные преобразования кодировки. You are responsible for any required encoding translation.

Читайте также:  Как вернуть контакты на телефон

Если _open вызывается с _O_WRONLY | _O_APPEND (режимом Append) и _O_WTEXT, _O_U16TEXTили _O_U8TEXT, он сначала пытается открыть файл для чтения и записи, прочтите спецификацию, а затем снова откройте ее для только запись. If _open is called with _O_WRONLY | _O_APPEND (append mode) and _O_WTEXT, _O_U16TEXT, or _O_U8TEXT, it first tries to open the file for reading and writing, read the BOM, then reopen it for writing only. Если происходит сбой открытия файла для чтения и записи, файл открывается только для записи и для параметра режима Юникода используется значение по умолчанию. If opening the file for reading and writing fails, it opens the file for writing only and uses the default value for the Unicode mode setting.

Если для формирования аргумента офлаг используются две или более константы манифеста, константы объединяются с оператором побитового | или (). When two or more manifest constants are used to form the oflag argument, the constants are combined with the bitwise-OR operator ( | ). Сведения о двоичном и текстовом режимах см. в разделе Файловый ввод-вывод в текстовом и двоичном режиме. For a discussion of binary and text modes, see Text and Binary Mode File I/O.

Аргумент пмоде является обязательным только при указании _O_CREAT . The pmode argument is required only when _O_CREAT is specified. Если файл уже существует, пмоде игнорируется. If the file already exists, pmode is ignored. В противном случае пмоде задает параметры разрешений файла, которые задаются при первом закрытии нового файла. Otherwise, pmode specifies the file permission settings, which are set when the new file is closed the first time. _open применяет текущую маску разрешений файла к пмоде перед установкой разрешений. _open applies the current file-permission mask to pmode before the permissions are set. (Дополнительные сведения см. в разделе _umask.) пмоде — это целочисленное выражение, которое содержит одну или обе следующие константы манифеста, определенные в . (For more information, see _umask.) pmode is an integer expression that contains one or both of the following manifest constants, which are defined in .

пмоде pmode Значение Meaning
_S_IREAD _S_IREAD Разрешено только чтение. Only reading permitted.
_S_IWRITE _S_IWRITE Разрешена запись. Writing permitted. (Если действует, разрешает чтение и запись.) (In effect, permits reading and writing.)
_S_IREAD | _S_IWRITE _S_IREAD | _S_IWRITE Разрешены чтение и запись. Reading and writing permitted.

Если заданы обе константы, они соединяются с оператором побитового или | (). When both constants are given, they are joined with the bitwise-OR operator ( | ). В Windows все файлы доступны для чтения; разрешение только на запись недоступно. In Windows, all files are readable; write-only permission is not available. Таким образом, режимы _S_IWRITE и _S_IREAD | _S_IWRITE эквивалентны. Therefore, the modes _S_IWRITE and _S_IREAD | _S_IWRITE are equivalent.

Если для пмодезадано значение, отличное от сочетания _S_IREAD и _S_IWRITE , даже если оно укажет допустимый пмоде в другой операционной системе — или если любое значение, отличное от разрешенных офлаг , равно , функция создает утверждение в режиме отладки и вызывает обработчик недопустимого параметра, как описано в разделе Проверка параметров. If a value other than some combination of _S_IREAD and _S_IWRITE is specified for pmode—even if it would specify a valid pmode in another operating system—or if any value other than the allowed oflag values is specified, the function generates an assertion in Debug mode and invokes the invalid parameter handler, as described in Parameter Validation. Если выполнение может быть продолжено, функция возвращает значение-1 и устанавливает для еинвал. If execution is allowed to continue, the function returns -1 and sets errno to EINVAL.

Требования Requirements

Подпрограмма Routine Обязательный заголовок Required header Необязательный заголовок Optional header
_open _open , , , ,
_wopen _wopen или or , , , ,

_open и _wopen — это расширения Майкрософт. _open and _wopen are Microsoft extensions. Дополнительные сведения о совместимости см. в разделе Совместимость. For more compatibility information, see Compatibility.