.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 1990, 1991 The Regents of the University of California. .\" All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Chris Torek and the American National Standards Committee X3, .\" on Information Processing Systems. .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\" @(#)fopen.3 6.8 (Berkeley) 6/29/91 .\" .\" Converted for Linux, Mon Nov 29 15:22:01 1993, faith@cs.unc.edu .\" Modified, aeb, 960421, 970806 .\" Modified, joey, aeb, 2002-01-03 .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH fopen 3 "20 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ fopen, fdopen, freopen \- функции для открытия потоков .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBFILE *fopen(const char *restrict \fP\fIpathname\fP\fB, const char *restrict \fP\fImode\fP\fB);\fP \fBFILE *fdopen(int \fP\fIfd\fP\fB, const char *\fP\fImode\fP\fB);\fP \fBFILE *freopen(const char *restrict \fP\fIpathname\fP\fB, const char *restrict \fP\fImode\fP\fB,\fP \fB FILE *restrict \fP\fIstream\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP \fBfdopen\fP(): .nf _POSIX_C_SOURCE .fi .SH ОПИСАНИЕ Функция \fBfopen\fP() открывает файл с именем, которое задано в виде строки в \fIpathname\fP, и связывает его с потоком. .PP Параметр \fImode\fP указывает на строку, начинающуюся с одной из следующих последовательностей (за ними могут следовать дополнительные символы, описанные далее): .TP \fBr\fP Открыть текстовый файл для чтения. Поток совмещается с началом файла. .TP \fBr+\fP Открыть для чтения и записи. Поток совмещается с началом файла. .TP \fBw\fP Обрезать файл до нулевой длины или создать текстовый файл для записи. Поток совмещается с началом файла. .TP \fBw+\fP Открыть для чтения и записи. Файл создаётся, если его не существует, в противном случае он обрезается. Поток совмещается с началом файла. .TP \fBa\fP Открыть для добавления (записи в конец файла). Файл создаётся, если его не существует. Поток совмещается с концом файла. .TP \fBa+\fP Открыть для чтения и добавления (записи в конец файла). Файл создаётся, если не существует. Вывод всегда добавляется в конец файла. В POSIX ничего не упоминается о начальном положении при чтении, когда используется данный режим. В glibc начальное положение в файле для чтения устанавливается в начало файла, но в Android/BSD/MacOS начальное положение в файле для чтения устанавливается в конец файла. .PP The \fImode\fP string can also include the letter \[aq]b\[aq] either as a last character or as a character between the characters in any of the two\-character strings described above. This is strictly for compatibility with ISO C and has no effect; the \[aq]b\[aq] is ignored on all POSIX conforming systems, including Linux. (Other systems may treat text files and binary files differently, and adding the \[aq]b\[aq] may be a good idea if you do I/O to a binary file and expect that your program may be ported to non\-UNIX environments.) .PP О имеющихся расширениях \fImode\fP в glibc смотрите ЗАМЕЧАНИЯ далее. .PP Любой созданный файл будет иметь атрибуты \fBS_IRUSR\fP | \fBS_IWUSR\fP | \fBS_IRGRP\fP | \fBS_IWGRP\fP | \fBS_IROTH\fP | \fBS_IWOTH\fP (0666), как изменённые в соответствии со значением umask процесса (смотрите \fBumask\fP(2)). .PP Reads and writes may be intermixed on read/write streams in any order. Note that ANSI C requires that a file positioning function intervene between output and input, unless an input operation encounters end\-of\-file. (If this condition is not met, then a read is allowed to return the result of writes other than the most recent.) Therefore it is good practice (and indeed sometimes necessary under Linux) to put an \fBfseek\fP(3) or \fBfsetpos\fP(3) operation between write and read operations on such a stream. This operation may be an apparent no\-op (as in \fIfseek(..., 0L, SEEK_CUR)\fP called for its synchronizing side effect). .PP Opening a file in append mode (\fBa\fP as the first character of \fImode\fP) causes all subsequent write operations to this stream to occur at end\-of\-file, as if preceded by the call: .PP .in +4n .EX fseek(stream, 0, SEEK_END); .EE .in .PP Файловый дескриптор, связанный с потоком, открывается как при вызове \fBopen\fP(2) со следующими флагами: .RS .TS allbox; lb lb c l. режим fopen() флаги open() \fIr\fP O_RDONLY \fIw\fP O_WRONLY | O_CREAT | O_TRUNC \fIa\fP O_WRONLY | O_CREAT | O_APPEND \fIr+\fP O_RDWR \fIw+\fP O_RDWR | O_CREAT | O_TRUNC \fIa+\fP O_RDWR | O_CREAT | O_APPEND .TE .RE .\" .SS fdopen() .\" Функция \fBfdopen\fP() связывает поток с существующим дескриптором файла \fIfd\fP. Режим \fImode\fP потока (одно из следующих значений: «r», «r+», «w», ,w+», «a», «a+») должен быть совместим с режимом дескриптора файла. Указатель положения в файле в новом потоке принимает значение, равное значению у \fIfd\fP, а указатели ошибок и конца файла очищаются. Режимы «w» или «w+» не обрезают файл. При этом не делается копия дескриптора файла и он будет закрыт одновременно с закрытием потока, созданного \fBfdopen\fP(). Результат применения \fBfdopen\fP() к общему объекту памяти не определён. .SS freopen() Функция \fBfreopen\fP() открывает файл с именем \fIpathname\fP и связывает его с потоком, указанным в \fIstream\fP. Исходный поток (если такой существовал) закрывается. Значение параметра \fImode\fP такое же как для функции \fBfopen\fP(). .PP Если значение \fIpathname\fP равно указателю null, то \fBfreopen\fP() изменяет режим потока на указанный в \fImode\fP; то есть, \fBfreopen\fP() переоткрывает pathname, связанный с потоком. Описание этого поведения было добавлено в стандарт C99, где сказано: .PP .RS В этом случае файловый дескриптор, связанный с потоком, не нужно закрывать, если вызов \fBfreopen\fP() завершился без ошибок. Допустимость изменения режима и при каких условиях определяется реализацией. .RE .PP Основной задачей функции \fBfreopen\fP() является смена файла, связанного со стандартным текстовым потоком (\fIstderr\fP, \fIstdin\fP или \fIstdout\fP). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Upon successful completion \fBfopen\fP(), \fBfdopen\fP(), and \fBfreopen\fP() return a \fIFILE\fP pointer. Otherwise, NULL is returned and \fIerrno\fP is set to indicate the error. .SH ОШИБКИ .TP \fBEINVAL\fP Передано неверное значение \fImode\fP в \fBfopen\fP(), \fBfdopen\fP() или \fBfreopen\fP(). .PP The \fBfopen\fP(), \fBfdopen\fP(), and \fBfreopen\fP() functions may also fail and set \fIerrno\fP for any of the errors specified for the routine \fBmalloc\fP(3). .PP Функция \fBfopen\fP() при ошибках устанавливает значение \fIerrno\fP равным какому\-либо значению из определённых в \fBopen\fP(2). .PP Функция \fBfdopen\fP() при ошибках устанавливает значение \fIerrno\fP равным какому\-либо значению из определённых в \fBfcntl\fP(2). .PP Функция \fBfreopen\fP() при ошибках устанавливает \fIerrno\fP равным какому\-либо значению из определённых в \fBopen\fP(2), \fBfclose\fP(3) и \fBfflush\fP(3). .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBfopen\fP(), \fBfdopen\fP(), \fBfreopen\fP() T} Безвредность в нитях MT\-Safe .TE .sp 1 .SH СТАНДАРТЫ .TP \fBfopen\fP() .TQ \fBfreopen\fP() C11, POSIX.1\-2008. .TP \fBfdopen\fP() POSIX.1\-2008. .SH ИСТОРИЯ .TP \fBfopen\fP() .TQ \fBfreopen\fP() POSIX.1\-2001, C89. .TP \fBfdopen\fP() POSIX.1\-2001. .SH ЗАМЕЧАНИЯ .SS "Замечания по glibc" Библиотека GNU C предоставляет следующие расширения строки в \fImode\fP: .TP \fBc\fP (начиная с glibc 2.3.3) Do not make the open operation, or subsequent read and write operations, thread cancelation points. This flag is ignored for \fBfdopen\fP(). .TP \fBe\fP (начиная с glibc 2.7) Открыть файл с флагом \fBO_CLOEXEC\fP. Подробности смотрите в \fBopen\fP(2). Этот флаг игнорируется для \fBfdopen\fP(). .TP \fBm\fP (начиная с glibc 2.3) .\" As at glibc 2.4: Пытаться получить доступ к файлу с помощью \fBmmap\fP(2), а не с помощью системных операций ввода\-вывода (\fBread\fP(2), \fBwrite\fP(2)). В настоящее время \fBmmap\fP(2) используется только для файла, открытого на чтение. .TP \fBx\fP .\" Since glibc 2.0? .\" FIXME . C11 specifies this flag Открыть файл в монопольном режиме (как с флагом \fBO_EXCL\fP у \fBopen\fP(2)). Если файл уже существует, то \fBfopen\fP() завершается с ошибкой и устанавливает значение \fIerrno\fP равное \fBEEXIST\fP. Этот флаг игнорируется для \fBfdopen\fP(). .PP В дополнении к этим символам, для \fBfopen\fP() и \fBfreopen\fP() поддерживается следующий синтаксис в \fImode\fP: .PP \fB ,ccs=\fP\fIстрока\fP .PP Передаваемая \fIстрока\fP используется как имя набора символов и поток помечается как широкосимвольный. С того момента внутренние функции преобразования перекодируют данные ввода\-вывода в соответствии с набором символов с именем \fIстрока\fP. Если синтаксис \fB,ccs=\fP\fIстрока\fP не указан, то широкосимвольность потока определяется по первой файловой операции. Если это операция является широкосимвольной, то поток помечается как широкосимвольный и загружаются функции для перекодировки. .SH ДЕФЕКТЫ .\" FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=12685 When parsing for individual flag characters in \fImode\fP (i.e., the characters preceding the "ccs" specification), the glibc implementation of \fBfopen\fP() and \fBfreopen\fP() limits the number of characters examined in \fImode\fP to 7 (or, before glibc 2.14, to 6, which was not enough to include possible specifications such as "rb+cmxe"). The current implementation of \fBfdopen\fP() parses at most 5 characters in \fImode\fP. .SH "СМ. ТАКЖЕ" \fBopen\fP(2), \fBfclose\fP(3), \fBfileno\fP(3), \fBfmemopen\fP(3), \fBfopencookie\fP(3), \fBopen_memstream\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .