#include<stdio.h>
#define NULL 0
void pro_err(FILE*fp) /*错误测试与处理的通用函数*/
{
if(ferror(fp)!=0)
{
printf("文件无法被打开!\n");
exit(0);
} /*有错输出提示信息后中止运行*/
else return; /*无错返回继续运行*/
}
void main()
{
FILE *fp;
int i,x;
if((fp=fopen("e:\\readonly.dat","rb"))==NULL) /*打开一个只读二进制文件*/
{
printf("文件无法被打开!\n");
exit(0);
}
for(i=0;i<3;i++) /*循环读取第1,3,5个实数*/
{
fseek(fp,(long)(i*sizeof(int)),0); /*指向当前要读取数据的位置*/
pro_err(fp); /*进行定位后错误测试*/
fread(&x,sizeof(int),1,fp); /*从当前位置读取1个整数*/
pro_err(fp);/*进行定位后错误测试*/
printf("%d %d\n",2*i+1,x); /*输出读取的单精度数据*/
}
fseek(fp,-2L*sizeof(int),SEEK_END); /*指向第9个整数*/
pro_err(fp); /*进行定位后错误测试*/
fread(&x,sizeof(int),1,fp); /*从当前位置读取1个整数*/
pro_err(fp); /*进行读数据错误测试*/
printf("%d %d\n",9,x); /*输出读取的整数*/
fseek(fp,-1L*sizeof(int),SEEK_END); /*指向第10个整数*/
pro_err(fp); /*进行定位后错误测试*/
fread(&x,sizeof(int),1,fp); /*从当前位置读取1个整数*/
pro_err(fp); /*进行读数据错误测试*/
printf("%d %d\n",10,x); /*输出读取的整数*/
fclose(fp); /*关闭fp所指向的文件*/
}