Документация по LinuxLinuxDoc.Ru 🔍

fopen, fdopen, freopen - функции для открытия потоков

НАЗВАНИЕ
fopen, fdopen, freopen - функции для открытия потоков

СИНТАКСИС
#include

FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fildes, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE
*stream);

ОПИСАНИЕ
Функция fopen открывает файл с именем path и связывает его
с потоком.

Параметр mode указывает на строку, начинающуюся с одной из
следующих последовательностей (за ними могут следовать
дополнительные символы):

r Открыть текстовый файл для чтения. Чтение
начинается с начала файла.

r+ Открыть для чтения и записи. Чтение или запись
начинаются с начала файла.

w "Урезать" файл до нулевой длины или создать
текстовый файл и открыть его для записи. Запись
начинается с начала файла.

w+ Открыть для чтения и записи. Файл создается, если
до этого его не существовало, в противном случае он
"урезается". Чтение или запись начинаются с начала
файла.

a Открыть для дописывания (записи в конец файла).
Файл создается, если до этого его не существовало.
Запись осуществляется в конец файла.

a+ Открыть для чтения и дописывания (записи в конец
файла). Файл создается, если до этого его не
существовало. Чтение или запись производятся с
конца файла.

Строка mode может также включать в себя символ ``b'' в
качестве последнего символа или символа, входящего в любые
описанные выше двухсимвольные комбинации. Это требование
является строгим только в случае, если требуется
совместимость этой версии с ANSI X3.159-1989 (``ANSI C'');
символ ``b'' игнорируется во всех POSIX-совместимых
системах, включая Linux. Другие системы могут иначе
обращаться к текстовым и бинарным файлам, и добавление
``b'' может оказаться полезным, если Вы осуществляете
ввод-вывод в двоичный файл; возможно, Ваша программа будет
когда-нибудь работать с не-Unix окружением.

Любой созданный файл будет иметь атрибуты
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH (0666),
как модифицированный величиной umask процесса (см.
umask(2)).

Чтение и запись могут накладываться друг на друга в
потоке, открытом для чтения/записи, в любом порядке.
Заметим, что ANSI C требует, чтобы между чтением/записью
использовались функции позиционирования в файле, пока
операция ввода не встретит конец файла. Если это условие
не выполняется, то при чтении разрешается возвращать
результат, не совпадающий с самым последним изменением. То
есть будет хорошим тоном (а иногда и действительно
необходимым в Linux) использовать функции fseek или fget-
pos между операциями чтения и записи в одном потоке. Эти
операции могут фактически быть "пустыми" (как, например,
fseek(..., 0L,SEEK_CUR), вызванная для того, чтобы возник
ее побочный эффект синхронизации).

Открытие файла в режиме дописывания (a в качестве первого
символа mode) приводит к тому, что все последующие
операции записи в этот поток производятся в конец файла,
как если бы перед ними была вызвана функция
fseek(stream,0,SEEK_END);

Функция fdopen связывает поток с существующим описателем
файла fildes. Режим mode потока (одно из следующих
значений: "r", "r+", "w", "w+", "a", "a+") должен быть
совместим с режимом описателя файла. Указатель файловой
позиции в новом потоке принимает значение, равное значению
fildes, а указатели ошибок и конца файла по значению равны
нулю. Режимы "w" или "w+" не "урезают" файл. Описатель
файла не скопирован и будет закрыт, когда поток, созданный
fdopen, закрывается. Результат применения fdopen в общем
объекте памяти неопределен.

Функция freopen открывает файл с именем path и связывает
его с потоком stream. Исходный поток (если такой
существовал) закрывается. Параметр mode используется, как
и в функции fopen . Основной задачей функции freopen
является изменение файла, связанного со стандартным
текстовым потоком (stderr, stdin, or stdout).

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
При успешном завершении fopen fdopen и freopen возвращают
указатель FILE. Иначе возвращается NULL, а в глобальную
переменную errno записывается код ошибки.

КОДЫ ОШИБОК
EINVAL Режим mode переданный fopen, fdopen, или freopen
является неверным.

Функции fopen, fdopen и freopen при ошибках устанавливают
значение errno равным какому-либо значению из определенных
в malloc(3).

Функция fopen при ошибках устанавливает значение errno
равным какому-либо значению из определенных в open(2).

Функция fdopen при ошибках устанавливает значение errno
равным какому-либо значению из определенных в fcntl(2).

Функция freopen при ошибках устанавливает errno равным
какому-либо значению из определенных в open(2), fclose(3)
и fflush(3).

СООТВЕТСТВИЕ СТАНДАРТАМ
Функции fopen и freopen соответствуют стандарту ANSI
X3.159-1989 (``ANSI C''). Функция fdopen соответствует
стандарту IEEE Std1003.1-1988 (``POSIX.1'').
Читать новости Linux в Telegram
Linux - fopen, fdopen, freopen - функции для открытия потоков
Мы в соцсетях ✉