- •Лекция 4
- •Файлы
- •Текстовые и бинарные файлы
- •Вчем отличия?
- •Описание файла
- •Библиотечные функции, используемые при работе с файлами.
- •Функция fopen()
- •Функция freopen()
- •const char* mode
- •Способ использования файла
- •Способ использования файла
- •Функция fclose()
- •Буферизация
- •Функция fflush()
- •Функция fflush()
- •Функция fprintf( )
- •Функция fscanf( )
- •Пример
- •Функция putchar()
- •Функция getchar( )
- •Прописные буквы в строчные:
- •Функции putc( ), fputc()
- •Функция getc( ), fgetc()
- •Функция feof( )
- •Функция puts( )
- •Функция fputs( )
- •Функция gets( )
- •Функция fgets( )
- •Пример
- •EOF ловушка
- •Функция fseek( )
- •Использование fseek( ) для печати содержимого файла
- •Функция ferror( )
- •Функция remove( )
- •Функция rewind( )
- •Функция fread( )
- •Функция fwrite( )
- •Пять стандартных файлов
- •Низкоуровневый ввод/вывод
Функция fseek( )
Функция fseek( ) позволяет выполнять чтение и запись с произвольным доступом.
Прототип: int fseek(FILE *fp, long count, int access);
fp - указатель на файл, возвращенный функцией fopen( ),
count - номер байта относительно заданной начальной позиции, начиная с которого будет выполняться операция,
access - способ задания начальной позиции. Переменная access может принимать следующие значения:
SEEK-SET (0) - начальная позиция задана в начале файла; SEEK-CUR (1) - начальная позиция считается текущей; SEEK-END (2) - начальная позиция задана в конце файла.
При успешном завершении возвращается ноль, при ошибке - ненулевое значение
Вызов fseek(fp,OL,0) означает, что мы идем в файл, на который ссылается указатель fp, и находим байт, отстоящий на 0 байт от начала, т.е. первый байт.
Использование fseek( ) для печати содержимого файла
#include <stdio.h> int main() {
FILE *fp; long set = 0L;
if ((fp=fopen("input.txt”,"r")) == 0) printf("Нельзя открыть%s\n", "input.txt");
else {
while(fseek(fp, set++, 0) == 0) putchar(getc(fp));
fclose(fp);
}
return 0;
}
while(fseek(fp, set++,0) == 0) putchar(getc(fp));
Вызов fseek(fp,OL,0) означает, что мы находим первый байт.
Затем функция putchar( ) печатает содержимое этого байта. При следующем прохождении через цикл переменная set увеличивается до 1L, и печатается следующий байт.
Процесс продолжается до тех пор, пока set не попытается попасть в fseek( ) после конца файла. В этом случае fseek( ) возвращает значение -1 и цикл прекращается.
Функция ferror( )
Функция ferror( ) позволяет проверить правильность выполнения последней операции при работе с файлами.
Прототип: int ferror(FILE *fp);
Вслучае ошибки возвращается ненулевое значение, в противном случае возвращается ноль.
Функция remove( )
Функция remove( ) удаляет файл. Прототип: int remove(const char * file_name);
file_name - указатель на строку со спецификацией файла.
При успешном завершении возвращается ноль, в противном случае возвращается ненулевое значение.
Функция rewind( )
Функция rewind( ) устанавливает указатель текущей позиции в начало файла.
Прототип: void rewind(FILE *fp);
Функция fread( )
Функция fread( ) предназначена для чтения блоков данных из потока.
Прототип:
unsigned fread(void *ptr, unsigned size, unsigned n, FILE * fp);
Она читает n элементов данных, длиной size байт каждый, в блок памяти, на который указывает указатель ptr, Общее число прочитанных байтов равно произведению n*size.
При успешном завершении функция fread( ) возвращает число прочитанных элементов данных, при ошибке - 0.
Функция fwrite( )
Функция fwrite( ) предназначена для записи в файл блоков данных.
Прототип:
unsigned fwrite(void *ptr, unsigned size, unsigned n, FILE *fp);
Она добавляет n элементов данных, длиной size байт каждый, в заданный выходной файл fp.
При успешном завершении операции функция fwrite() возвращает число записанных элементов данных, при ошибке - неверное число элементов данных.
Пять стандартных файлов
stdin - для ввода данных из стандартного входного потока (по умолчанию - c клавиатуры);
stdout - для вывода данных в стандартный выходной поток (по умолчанию - на экран дисплея);
stderr - файл для вывода сообщений об ошибках (всегда связан с экраном дисплея);
stdprn - для вывода данных на принтер; stdaus - для ввода и вывода данных в
коммуникационный канал.
Низкоуровневый ввод/вывод
Вязыке Си имеется также система низкоуровневого ввода/вывода без буферизации и форматирования данных, соответствующая стандарту системы UNIX.
Прототипы составляющих ее функций находятся в файле <io.h>.
Кэтим функциям относятся:
open( ) - открыть файл; close( ) - закрыть файл; read( ) - читать данные; write( ) - записать данные;
lseek( ) - поиск определенного байта в файле; unlink( ) - уничтожить файл.
Здесь используются дискрипторы файлов int fp.