Программа 7_03.с
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
main( ) {
FILE *fl; int j, k;
struct { char s [7]; int n; float r; } b;
clrscr();
strcpy(b.s,"Строка");
fl=fopen("c_rec","wb");
for(j=l;j<ll;j++)
{
b.n=j; b.r=sqrt(j);
fwrite(&b,sizeof(b),l,fl);
printf("\n%s %d %f",b.s,b.n,b.r);
}
fclose(fl); printf("\n");
fl=fopen("c_rec","rb");
for(j=10; j>0; j —) {
fseek(fl,(j-1)*sizeof(b),SEEK_SET);
fread(&b,sizeof(b),l,f1);
printf("\n%s %d %f",b.s,b.n,b.r);
}
getch();
}
Двоичные файлы в Си
Работа с настоящими двоичными файлами в Си отличается от приведенного выше примера только тем, что обмены с одним и тем же дисковым файлом могут производиться порциями любой длины, тогда как в записеориентиро-ванном файле предполагается, что размеры всех порций одинаковы.
Кроме набора функций {fopen/fciose, fread/fwrite}, для работы с двоичными файлами в библиотеке Borland С предусмотрены и другие средства -
{_dos_open/_dos_close, _dos_read/_dos_write}, (_creat/_close, _read/_write}.
Однако знакомство со всеми возможностями этой библиотеки в рамках настоящего пособия не предусмотрено.
Программа 7_04.с
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main ( ) {
FILE *f1; int j, k;
char s[7]="Строка";
int n;
float r; clrscr. () ;
fl=fopen("c_bin","wb");
for(j=l;j<11;j++) {
r=sqrt(j);
fwrite(s,sizeof(s),1,f1);
fwrite(&j,sizeof(int),1,f1);
fwrite(&r,sizeof(float),1,f1);
printf("\n%s %d %f",s,j,r); }
fclose(f1l); printf("\n"); fl=fopen("c_rec","rb"); for(j=10; j>0; j--) {
fseekffl,(j-1)*(sizeof(s)+sizeof(int)+sizeof(float)),
SEEK_SET);
fread(&s,sizeof(s),1,fl);
fread(&n,sizeof(int),1,f1);
fread(&r,sizeof(float),1,f1);
printf("\n%s %d %f",s,n,r); }
getch(); }