牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2010-03-11 投稿人: 浏览次数:4702

为了效率的考虑,不至于频繁调用系统函数和访问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).

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。