|
НАЗВАНИЕ
fopen, freopen, fdopen - открыть поток
СИНТАКСИС
#include <stdio.h> FILE *fopen (filename, type) char *filename, *type; FILE *freopen (filename, type, stream) char *filename, *type; FILE *stream; FILE *fdopen (fildes, type) int fildes; char *type;
ОПИСАНИЕ
Функция fopen открывает файл с именем filename, ассоциирует с ним поток и возвращает указатель на структуру
типа FILE, соответствующую этому потоку.
Аргумент filename является указателем на цепочку символов - имя открываемого файла.
Аргумент type - это указатель на цепочку символов, которая может принимать одно из следующих значений:
r | Открыть на чтение. |
---|---|
w | Опустошить или создать для записи. |
a | Добавлять; открыть для записи в конец файла или создать для записи. |
r+ | Открыть для изменения (чтения и записи). |
w+ | Опустошить или создать для изменения. |
a+ | Добавлять; открыть или создать для изменения в конце файла. |
Функция freopen подставляет указанный файл вместо ранее открытого потока, заданного аргументом stream. Первоначальный поток закрывается независимо от того, удалось ли открыть новый файл. Функция freopen возвращает указатель на структуру типа FILE, ассоциированную с потоком.
Функция freopen обычно используется для привязки заранее открытых потоков stdin, stdout и stderr к другим файлам.
Функция fdopen ассоциирует поток с дескриптором файла fildes, полученным в результате выполнения системных вызовов open, dup, creat или pipe(2), которые открывают файл, но не возвращают указатель на структуру типа FILE, описывающую поток. Этот указатель требуется для идентификации потока во многих библиотечных функциях подраздела 3S. Тип потока, заданный аргументом type, должен соответствовать режиму доступа к открытому файлу.
Если файл открывается для обновления, то к результирующему потоку применимы операции как ввода, так и вывода. Однако операция ввода не может непосредственно следовать за операцией вывода, без промежуточного использования функций fseek или rewind, а операция вывода не может непосредственно следовать за операцией ввода без промежуточного использования функций fseek, rewind или операции ввода, достигающей конца файла.
Если файл открывается для добавления (то есть тип type равен "a" или "a+"), то невозможно изменить информацию, уже содержащуюся в файле. Функция fseek может использоваться для перемещения указателя файла в любую его позицию, но при операции записи указатель текущей позиции файла игнорируется. Вся выводимая информация записывается в конец файла и указатель текущей позиции перемещается на конец записываемых данных. Если два процесса открывают один и тот же файл для добавления, то каждый процесс может писать в файл без риска разрушить вывод другого процесса. Данные, записываемые двумя процессами, будут перемежаться в файле в порядке их поступления.
СМ. ТАКЖЕ
creat(2), dup(2), open(2), pipe(2), fclose(3S),
fseek(3S), stdio(3S).
ДИАГНОСТИКА
В случае ошибки функции fopen, fdopen и freopen возвращают пустой указатель NULL.
|