使用fread返回值时需要注意,返回值不一定是读取到的字节数
函数原型
//每次读取size个 读取nmemb次
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
//每次写入size个 读取nmemb次
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
解析:当size=1的时候,返回值为读取/写入的字节数,如果size不为1则返回值不为字节数。
返回读写的次数,如果size=1,则返回值为读到的字节数。
比较返回值与fread时间
int get_string()
{
FILE *fp;
fp = fopen("flow.txt","r");
if(fp == NULL)
{
printf("open flow error\n");
return -1;
}
int ret=-1;
char buf[512];
struct timeval start, end;
int interval;
gettimeofday(&start, NULL);
ret = fread(buf,1,26*5,fp);
gettimeofday(&end, NULL);
interval = 1000000*(end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec);
printf("ret1=%d\t",ret);
printf("interval = %f\n\n", interval/1000.0);
fseek(fp,0L,SEEK_SET);
gettimeofday(&start, NULL);
ret = fread(buf,26*5,1,fp);
gettimeofday(&end, NULL);
printf("ret2=%d\t",ret);
interval = 1000000*(end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec);
printf("interval = %f\n\n", interval/1000.0);
fseek(fp,0L,SEEK_SET);
gettimeofday(&start, NULL);
ret = fread(buf,1024,1,fp);
gettimeofday(&end, NULL);
printf("ret3=%d\t",ret);
interval = 1000000*(end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec);
printf("interval = %f\n\n", interval/1000.0);
fclose(fp);
return 0;
}
打印输出
ret1=130 interval = 0.005000
ret2=1 interval = 0.001000
ret3=0 interval = 0.001000
ret1 返回130,代表真实读到的字节数,时间比较大
ret2 返回1,读取1次,每次读26*5个字节,读到多少字节不知道,时间0.001000
ret2 返回0,读取1次,每次读1024个字节 时间0.001000