Модуль 11. Файлы
Структура типа FILE
Для каждого потока, который связывается с файлом, используется специальная управляющая структура, имеющая тип FILE.
–Эта структура определяется в файле <stdio.h>.
–Ее конкретная реализация системно зависима.
–Ее поля заполняются и используются операционной системой.
Библиотечные функции для работы с файлами используют указатель на эту структуру (указатель на файл).
–Файл предварительно должен быть открыт.
–По окончании всех операций с файлом его рекомендуется закрыть.
–Освободившийся указатель можно использовать для открытия другого файла.
Количество одновременно открытых файлов системно-зависимо.
5
Модуль 11. Файлы
Открытие и закрытие файлов
FILE *fopen(const char *filename, const char *mode);
–открывает файл с именем filename и возвращает указатель на связанный с этим файлом поток или NULL при ошибке;
–строка mode задает способ доступа к файлу и тип потока (текстовый или бинарный):
•
•
•
r w a
-открыть только для чтения;
-открыть новый файл для записи;
-открыть для записи в конец файла или создать новый, если файл не существует;
• |
r+ - |
открыть существующий файл для чтения и записи; |
• |
w+ - |
создать новый файл для чтения и записи; |
• |
a+ - |
открыть (или создать, если не существует) для |
|
|
чтения/записи в конце файла . |
6
Модуль 11. Файлы
Открытие и закрытие файлов (продолжение)
– для указания типа потока к способу доступа добавляется символ t (текстовый) или b (бинарный), например,
• wt, a+b и т.д.
–Если t или b не указаны, то тип потока по умолчанию задается значением глобальной переменной _fmode,
•которая может иметь значение O_TEXT или O_BINARY
int fclose( FILE *fp );
–закрывает указанный файл поток), предварительно опустошив его буфер;
–возвращает 0 при успешном завершении и EOF при ошибке.
int fcloseall( void );
–закрывает все файлы (потоки), кроме предопределенных,
–возвращает число закрытых потоков или EOF при ошибке.
7
Модуль 11. Файлы
Операции ввода-вывода
–int fgetc(FILE *stream);
–int fputc (int ch, FILE *stream);
–int ungetc(int ch, FILE *stream);
–int getw(FILE *stream);
–int putw(int w, FILE *stream);
–char *fgets(char *string, int n, FILE *stream);
–int fputs(const char *string, FILE *stream);
–int fscanf (FILE *stream, const char *format,...);
–int fprintf(FILE *stream, const char *format,...);
–size_t fread (void *ptr, size_t size, size_t n,
FILE *fp );
– size_t fwrite(void *ptr, size_t size, size_t n,
FILE *fp );
8