- •Потоки и файлы
- •Текстовые потоки
- •Стандартные потоки
- •Связь с консольным вводом / выводом
- •Ввод / вывод на консоль
- •Основы файловой системы
- •Указатель файла
- •Открытие файла
- •Допустимые значения режим
- •Перенаправление стандартных потоков: функция freopen()
- •Закрытие файла
- •Чтение и запись символов(стандартные потоки)
- •Трудности использования getchar()
- •Запись символа
- •Чтение символа
- •Чтение и запись строк (стандартные потоки)
- •Ввод / вывод строк: fputs() и fgets()
- •Int printf(const char *управляющая_строка, ...);
- •Спецификаторы преобразования для функции printf()
- •Int scanf(const char *управляющая_строка, ...);
- •Спецификаторы преобразования
- •Спецификаторы преобразования для функции scanf()
- •Использование feof()
Использование feof()
Как уже говорилось, если достигнут конец файла, то getc() возвращает EOF. Однако проверка значения, возвращенного getc(), возможно, не является наилучшим способом узнать, достигнут ли конец файла. Во-первых, файловая система языка С может работать как с текстовыми, так и с двоичными файлами. Когда файл открывается для двоичного ввода, то может быть прочитано целое значение, которое, как выяснится при проверке, равняется EOF. В таком случае программа ввода сообщит о том, что достигнут конец файла, чего на самом деле может и не быть. Во-вторых, функция getc() возвращает EOF и в случае отказа, а не только тогда, когда достигнут конец файла. Если использовать только возвращаемое значение getc(), то невозможно определить, что же на самом деле произошло. Для решения этой проблемы в С имеется функция feof(), которая определяет, достигнут ли конец файла. Прототип функции feof() такой:
int feof(FILE *уф);
Если достигнут конец файла, то feof() возвращает true (истина); в противном же случае эта функция возвращает нуль.
Функция ferror()
Функция ferror() определяет, произошла ли ошибка во время выполнения операции с файлом. Прототип этой функции следующий:
int ferror(FILE *уф);
где уф — допустимый указатель файла. Она возвращает значение true (истина), если при последней операции с файлом произошла ошибка; в противном же случае она возвращает false (ложь). Так как при любой операции с файлом устанавливается свое условие ошибки, то после каждой такой операции следует сразу вызывать ferror(), а иначе данные об ошибке могут быть потеряны.
Стирание файлов
Функция remove() стирает указанный файл. Вот ее прототип:
int remove(const char *имя_файла);
В случае успешного выполнения эта функция возвращает нуль, а в противном случае — ненулевое значение.
Дозапись потока
Для дозаписи содержимого выводного потока в файл применяется функция fflush(). Вот ее прототип:
int fflush(FILE *уф);
Эта функция записывает все данные, находящиеся в буфере в файл, который указан с помощью уф. При вызове функции fflush() с пустым (null) указателем файла уф будет выполнена дозапись во все файлы, открытые для вывода.
После своего успешного выполнения fflush() возвращает нуль, в противном случае — EOF.