程序员的自我修养: fread-C语言是怎样读取文件的

为了效率的考虑,不至于频繁调用系统函数和访问IO设备,MSVC CRT的fread采用缓冲设计.

 

C语言提供的关于缓冲的函数有:

 

fread的调用过程大概是:

fread -> fread_s(增加缓冲溢出保护, 加锁) -> _fread_nolock_s(循环读取,缓冲) -> _read(换行符转换) -> ReadFile(读取文件)

 

加注释的FILE结构如下:

 

核心函数_fread_nolock_s(循环读取,缓冲)如下:

 

其中,

 

代码中分了三种情况:

1) 缓冲区不为空

此时, 把缓冲区中的数据复制到传入的字符数组中.

 

2) 缓冲区为空, 需要读取的数据大于缓冲的尺寸

此时, 直接调用函数_fread把文件中的内容写到传入的字符数组中.

 

3) 缓冲区为空, 需要读取的数据不大于缓冲的尺寸

此时, 调用函数_fread读满缓冲区, 并再写缓冲区的一个字符到传入的字符数组中.

 

若未读满传入的字符数组, 循环执行上述1~3过程, 直到读满或读到文件末尾(EOF).

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值