КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Прямой доступ к файлам
Форматированный ввод-вывод В некоторых случаях информацию удобно записывать в файл безпреобразования, т.е. в символьном виде пригодном для непосредственного отображения на экран. Для этого можно использовать функции форматированного ввода-вывода: 1. int fprintf(FILE *f, const char*fmt,...), где FILE*f – указатель на файл, в который производится запись, const char*fmt – форматная строка, ... – список переменных, которые записываются в файл. Функция возвращает число записанных символов.
2. int fscanf(FILE *f, const char*fmt, par1,par2,...), где FILE*f – указатель на файл, из которого производится чтение, const char*fmt – форматная строка, par1, par2, … – список переменных, в которые заносится информация из файла. Функция возвращает число переменных, которым присвоено значение.
Пример 113 void main() { FILE *f; int n; if((f=fopen(“int.dat”,”w”))==0) { perror(“int.dat”); exit(0); } for(n=1;n<11;n++) fprinf(f,”\n%d %d”,n,n*n); fclose(f); if((f=fopen(“int.dat”,”r”))==0) { perror(“int.dat”); exit(1); } int nn; while(fscanf(f, ”%d%d”,&n,&nn)) printf(“\n%d %d”,n,nn); fclose(f); } Рассмотренные ранее средства обмена с файлами позволяют записывать и считывать данные только последовательно. Операции чтения/записи всегда производятся, начиная с текущей позиции в потоке. Начальная позиция устанавливается при открытии потока и может соответствовать начальному или конечному байту потока в зависимости от режима открытия файла. При открытии потока в режимах “ r ” и “ w ” указатель текущей позиции устанавливается на начальный байт потока, при открытии в режиме “ a ” – за последним байтом в конец файла. При выполнении каждой операции указатель перемещается на новую текущую позицию в соответствии с числом записанных/прочитанных байтов. Средства прямого доступа дают возможность перемещать указатель текущей позиции в потоке на нужный байт. Для этого используется функция int fseek(FILE *f, long off, int org), где FILE *f – указатель на файл, long off – позиция смещения int org – начало отсчета. Смещение задается выражение или переменной и может быть отрицательным, т.е. возможно перемещение как в прямом, так и в обратном направлениях. Начало отсчета задается одной из определенных в файле <stdio.h> констант: SEEK_SET ==0 – начало файла; SEEK_CUR==1 – текущая позиция; SEEK_END ==2 – конец файла. Функция возвращает 0, если перемещение в потоке выполнено успешно, иначе возвращает ненулевое значение.
Пример 114 fseek(f,0L,SEEK_SET); /*перемещение к началу потока из текущей позиции*/ fseek(f,0L,SEEK_END); /*перемещение к концу потока из текущей позиции*/ fseek(f,-(long)sizeof(a),SEEK_SET); //перемещение назад на длину переменной а.
Кроме этой функции, для прямого доступа к файлу используются: long tell(FILE *f); /*получает значение указателя текущей позиции в потоке*/ void rewind(FILE *f); /*установить значение указателя на начало потока.*/
Дата добавления: 2014-11-29; Просмотров: 403; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |