3.2. Открытие файлов
Когда программа начинает выполняться, автоматически открываются следующие пять потоков:
стандартный ввод (stdin);
стандартный вывод (stdout);
стандартный вывод для сообщений об ошибках (stderr);
стандартный последовательный порт (stdaux);
стандартное устройство печати (stdprn).
Рассмотренные ранее функции scanf(),getchar()иgets()работают сstdin, аprintf(),putchar()иputs()– сstdout.
По умолчанию stdinсвязывается с клавиатурой, аstdoutиstderr– с дисплеем, однако для переопределения стандартного ввода-вывода программы можно использовать символы перенаправления из командного языка MS DOS или рассматриваемую ниже функциюfreopen().
Следует отметить, что имена stdin,stdoutиstderrв Cтакже являются указателями на переменные типаFILEи их можно использовать как идентификаторы файла в приведенных ниже функциях ввода-вывода. Кроме того, вstdio.hопределена константаEOF, численное значение которой равно-1. Эта константа возвращается некоторыми функциями ввода, когда достигается конец файла.
Остальные файлы программы должны быть открыты для ввода и вывода. Открытие файлов выполняется с помощью функции fopen(). Закрытие уже открытого файла и переназначение потока на другой файл осуществляется с помощью функцииfreopen(). Функцииfopen()иfreopen()имеют следующие описания:
FILE *fopen(char *имя-файла, char * тип)
FILE *freopen(char * имя-файла, char * тип,
FILE *имя-старого-файла)
где
имя-файла– строковая константа или переменная, задающая имя файла (с указанием пути, если это необходимо).
тип – строковая константа или переменная, определяющая способ доступа к файлу. Параметртип может иметь следующие значения:
|
Значение типа |
Действие |
|
"r" |
Открыть текстовый файл для чтения (файл должен существовать). |
|
"w" |
Открыть пустой текстовый файл для записи; если файл существует, его содержимое теряется. |
|
"a" |
Открыть текстовый файл для записи в конец файла (добавление); файл создается, если он не существует. |
|
"r+" |
Открыть для чтения и записи (файл должен существовать). |
|
"w+" |
Открыть пустой текстовый файл для чтения и записи; если файл существует, его содержимое теряется. |
|
"a+" |
Открыть текстовый файл для обновления (чтения и записи), добавив запись к концу существующего файла или создать новый файл в случае его отсутствия; чтение возможно для всего файла, а запись возможна только в конец файла. |
|
"rb", "wb", "ab", "ab+", "a+b", "wb+", "w+b" |
Эти режимы действуют так же, как предыдущие, только вместо текстового доступа к файлу используется двоичный доступ.
|
имя-старого-файла– указатель на закрываемый файл, поток с которого переназначается на файл, определенный вимени-файла.
После того как программа успешно откроет файл, функции fopen()иfreopen()возвращаютидентификатор файла– указатель на переменную типаFILE, который могут использовать другие функции ввода/вывода, чтобы ссылаться на этот файл. В случае, если произошла ошибка при открытии или переназначении файла, функции возвращают значениеNULL.
