fread函数的返回值
Posted 为了维护世界和平_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fread函数的返回值相关的知识,希望对你有一定的参考价值。
使用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);
返回值
RETURN VALUE
On success, fread() and fwrite() return the number of items read or written. This number equals the number of bytes transferred only when size is 1.
解析:当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
以上是关于fread函数的返回值的主要内容,如果未能解决你的问题,请参考以下文章
读的是exe可执行文件 fread返回值是1024,但是buf里面怎么没有内容??