fread函数原型:

size_tfread (void*buffer,size_tsize,size_tcount,FILE*stream) ;

size和count的含义:每次读count个块,每块为size字节

fread的返回值含义为:读到的块数,假定现在返回值为num(size太具有歧义,会让人以为是读到的字节数)

num值的判断:

1.num == count,读操作成功,返回count*size个字节;

2.num == 0,此时fread并不一定是读错了或到文件末尾了,fread函数返回值并没有判断这两种情况,以上两种情况只能用函数ferror和feof判断(返回值非零为正常)。

当num为0时,也有可能只是读到的块数为0,前面说了不一定是文件末尾,那为什么会返回0呢?

num = fread ( buf, 1024, 1, fp),看一下这个例子,假如你的文件大小不足1024字节,或是循环读文件,最后一次循环剩余的字节小于1024字节,这个时候fread就会返回0值,并且buf中没有数据,这就导致文件根本没有读过去或是没读够。

解决这个问题的方法:

1.最简单,也就粗暴的方法,就是将size置为1, fread ( buf, 1, 1024, fp),一次读1字节,怎么样都不会错,这个方法的缺点就在于效率低下,并不是fread函数使用的初衷,以块读写是为了提高效率的,所以这种方法只能用于没有办法的时候。

2.在读文件之前,先使用stat函数,获取文件的大小,这样读取到末尾的时候直接写具体的大小就好了,大致如下:

filesize = stat(file,...);

n = filesize/size;

remain = filesize%size;

while(n){ fread(..,size,........);    n--;    }

fread(..,remain,............);

此方法的缺点就是stat函数是linux系统函数,windows系统下无法使用,暂时也没找到替代函数.......(linux系统还可以直接用read函数.....windows简直.............第一种方法就是在没找到更好的方法之前,在windows下用的,没有办法的办法)

PS:如果大神们能看见我的拙见,有更好的在windows下的解决方法,一定要告诉我[含泪期待脸]

fread函数 linux在哪,fread函数返回值相关推荐

  1. linux内核的延时函数,linux中内核延时函数 (转)

    第一类延时函数原型是:(忙等) void ndelay(unsigned long nsecs); void udelay(unsigned long usecs); void mdelay(unsi ...

  2. php 函数返回值mixed,认识函数的类型、参数与返回值

    函数的类型.参数与返回值 一.函数的基本语法语法 functionfunctionName(类型限定参数列表):返回值类型 { } 案例:计算两个数之和. functionsum(int$a,int$ ...

  3. 【Python】函数的可变可选参数传递及返回值

    函数的参数传递 参数个数 函数可以有参数,也可以没有参数,但必须保留括号 def <函数名>():<函数体>return<返回值> 可选参数传递 函数定义时可以为某 ...

  4. db2自定义函数能返回几个参数_函数的定义、参数、返回值

    一.昨日内容回顾 昨日内容回顾 其他模式补充 r+ w+ a+ 文件内光标移动 在rt模式下read内n表示的读取字符的个数 其他情况及其他方法内n表示都是字节数 f.read(n) f.seek(o ...

  5. (14年)2.写一个函数int func(int n)其返回值是n的逆序整数,例如n=123函数返回321.n=72839,函数返回93827

    #include <stdio.h> #include <stdlib.h> /*写一个函数int func(int n)其返回值是n的逆序整数 例如n=123.函数返回321 ...

  6. Fread 和fwrite的参数不同,返回值不同

    函数fwrite 功能   C语言函数,向文件写入一个数据块  . size_t fwrite(const void* buffer, size_t size, size_t count, FILE* ...

  7. linux系统creat函数,Linux系统调用之creat函数

    Linux中系统调用很多,但是再多也有几种不变的根本:创建,打开,写,读,关闭,删除,等最最基本的操作,就像人们所常说的,Linux上的一切我们都可以当做文件来处理,既然是文件,那么以上的几种操作就是 ...

  8. linux协议栈skb操作函数,linux协议栈skb操作函数

    1,struct sk_buff数据结构 struct sk_buff{ //这两个结构必须放在最前面 struct sk_buff *next; struct sk_buff *prev; stru ...

  9. sleep 函数 linux 线程吗,sleep函数在多线程中的作用

    1.前言 多线程中经常会使用sleep()函数,我们知道cpu对于多线程的操作是采用时间片轮询的方式,即,时间片1操作线程A,时间片1结束后,时间片2操作线程B,时间片2结束后,时间片3操作线程A,依 ...

  10. golang 函数一 (定义、参数、返回值)

    对于GoLang函数的定义或者说理解: 函数是结构化编程中最小的模块单元,日常开发过程中,将复杂的算法过程分解为若干个小任务(代码块),使程序的结构性更清晰,程序可读性提升,易于后期维护和让别人读懂你 ...

最新文章

  1. 各系统QT安装ROS后不显示src问题
  2. android apk签名工具_关于keytool和jarsigner工具签名的使用小结
  3. css dl图片布局,经典图文列表以及CSS布局切换
  4. 通过串口输入控制指令控制图像在VGA显示器中的显示位置
  5. python的核心数据类型_Python核心数据类型-集合
  6. 小鱼易连电脑版_电脑?不,它是随时就绪的专业电话会议解决方案
  7. 网络编程(part7)--网络主机/IP地址/域名/端口号
  8. docker宿主机访问容器_Docker容器与宿主机器通过IP内外通讯
  9. Python花式编程案例集锦(6)
  10. Spring MVC学习总结(8)——Swagger入门详解
  11. zabbix_server执行window脚本出现中文乱码如何解决
  12. 11g表名大小写 oracle_Oracle数据库总结
  13. ICM20602互补滤波
  14. GoDot引擎打包安卓
  15. win7中怎么显示文件名后缀
  16. # 量子力学中叠加态、本征态、混合态、纯态、纠缠态、直积态的区别(百度整理来的)
  17. 日语输入法的输入规则
  18. ECSHOP快递单号查询插件圆通V8.2专版
  19. 文字保护纱-Material Design
  20. Spring的sessionFactory配置详解

热门文章

  1. mock gps android,GitHub - Hilaver/MockGPS: Android application to fake GPS
  2. 30个Java自学网站
  3. java实验报告大全
  4. Java全国计算机等级考试二级笔记---操作题部分
  5. linux+qt经典教程+pdf下载,Qt入门教程 详细讲解版.pdf
  6. win10下载java软件,下载适用于Windows 10的最新Java版本[32位,64位]
  7. 软件测试--用例编写
  8. 火山安卓全屏侧滑布局器使用教程
  9. python库下载(包括一些pip安装不成功的库下载)
  10. java网上订餐系统开题报告_网上订餐系统的设计与实现