Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_prog2_ru_2016_3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
334 Кб
Скачать
☆

Int a2; long b2;

sscanf(buf1,"a1=%d, b1=%ld",&a2,&b2);

printf("a2=%d b2=%ld\n",a2,b2); //a2=10 b2=50000

2.7 Блоковый ввод-вывод

Эти функции предназначены для ввода-вывода блоков байт. Блок – это группа рядом расположенных байт, между которыми нет никаких специальных разделителей. Для того чтобы не иметь проблем с символами '\n', '\0', блоковый ввод-вывод выполняют в бинарном режиме. За одно обращение можно переносить несколько блоков.

Функция блокового записи (вывода) в файл имеет прототип:

Int fwrite(void *ptr, int size, int n, file *fp);

Эта функция записывает через поток fp в открытый файл N блоков, размером size байт каждый, из области памяти, определяемой указа­телем ptr. В случае успеха возвращает число блоков, а в случае ошибки – EOF.

Пример. Запись блоков данных в открытый для записи в двоичном режиме файл через поток fp

FILE *fp=fopen(“abc.txt”,"wb");

if(fp==NULL){puts("ошибка открытия файла"); return -1;}

struct REC{int a[2]; float b;}; //определение структ.типа

REC str1={1,2, 3.3}; //определение и инициализация структуры

fwrite(&str1,sizeof(REC),1,fp); // запись структуры в файл

REC str2[3]={{3,4, 5.5},{6,7, 8.8},{9,10, 1.1}};

fwrite(str2,sizeof(REC),3,fp);//запись массива структур в файл

fclose(fp);

Функция блокового чтения (ввода) из файла имеет прототип:

Int fread(void *ptr,int size,int n,file *fp);

Эта функция считывает через поток fp из открытого файла N блоков, размером size байт каждый, в область памяти, определяемой указате­лем ptr. В случае успеха возвращает число блоков, а в случае ошибки или достижения конца файла – EOF.

Пример. Чтение блоков данных из открытого для чтения в двоичном режиме файла через поток fp

FILE *fp=fopen(“abc.txt”,"rb");

if(fp==NULL){puts("ошибка открытия файла"); return -1;}

REC str3, str4[3]; //определение структуры и массива структур

fread(&str3,sizeof(REC),1,fp); // чтение структуры из файла

printf("%d %d %f\n",str3.a[0],str3.a[1],str3.b);

fread(str4,sizeof(REC),3,fp);//чтение массива структур из файла

for(int i=0;i<3;i++) //вывод массива структур на экран

printf("%d %d %f\n",str4[i].a[0],str4[i].a[1],str4[i].b);

fclose(fp);

2.8 Произвольный доступ к файлу

При обмене данными с файлом (записи и чтении) – место, куда записывается или считывается информация, определяется указателем записи-чтения. Ранее рассматривались функции обмена с файлом, ко­торые осуществляли последовательный доступ к файлу. В библиотеке языка Си имеются функции, позволяющие выполнить произвольный доступ к файлу, т.е. доступ в любую точку файла.

Функция установки указателя записи-чтения на начало файла имеет прототип void rewind(FILE *fp); Например: rewind(fp);

Функция установки указателя записи-чтения в произвольную точку файла имеет прототип:

Int fseek(file *fp, long offset, int from_where);

Эта функция устанавливает указатель записи-чтения в потоке fp на offset байт вправо или влево. Если offset>0, то указатель сдвигает­ся в сторону конца файла, если offset<0, то указатель сдвигается в сторону начала файла. Параметр from_where задает точку отсчета для сдвига: SEEK_SET – сдвиг от начала файла, SEEK_CUR – сдвиг от теку­щей позиции указателя, SEEK_END – сдвиг от конца файла. В случае успеха функция возвращает 0, иначе – EOF.

Установка указателя записи-чтения левее начала файла считается ошибкой, установка указателя правее конца файла делает значение указателя записи-чтения неопределенным. Например:

//установка указателя записи-чтения через 10байт от начала файла fseek(fp,10L,SEEK_SET);

Функция определения текущего положения указателя записи-чтения имеет прототип: long ftell(FILE *fp);

Эта функция возвращает значение в байтах (тип long) от начала фай­ла до текущего положения указателя записи-чтения файла, открытого через поток fp. В случае ошибки функция возвращает –1L. Например:

long cur=ftell(fp);

Пример. Запись и добавление в файл блоков данных (структур) и чтение одной заданной структуры записанных ранее в файл структур.

#include<stdio.h>

struct REC{unsigned id;char name[20];unsigned mark;};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]