理解C语言标准I/O函数

通常在C 语言中使用标准I/O 函数的第一步就是用fopen() 打开一个文件( 标准输入输出是自己打开的),fopen() 函数在打开一个文件的同时还建立了一个缓冲区, 还有一个包含文件和缓冲区相关数据的数据结构, 我们熟知的FILE 指针类型,FILE 类型的指针并不是指向文件本身, 而是指向上面所说的包含文件信息的数据结构... 不仅如此,fopen() 函数的返回值就是一个指向该结构的指针, 共其他需要操作该文件的函数能找到该结构... 假设把这个值赋给了一个名为fp 的指针变量, 我们称fopen() 函数打开一个流, 如果以文本模式打开, 可以得道一个文本流, 如果以二进制模式打开, 那么就得道一个二进制流...

 

这个数据结构通常包括一个文件位置指示器, 以确定在流中的当前位置... 还包括一个错误指示器和文件结尾指示器, 一个指向缓冲区起始处的指针, 一个文件标识符, 和一个记录实际复制到缓冲区的字节数的计数器...

 

岔开了...fopen() 函数打开之后, 就是调用stdio.h 文件中声明的某个输入函数,fscanf(),getc(),fgets()... 调用这些函数中的任意一个都会把一块数据从文件复制到缓冲区中... 缓冲区的大小依赖具体的实现, 但是通常是512 字节或者它的倍数( 硬盘和内存的增大, 缓冲区也在逐渐增大)... 除了填充缓冲区外, 初次函数调用还将设置fp 所指的结构中的值... 特别的, 将设置流的当前位置和复制到缓冲区的字节数.. 一般的当前位置从0 字节开始...

 

数据结构和缓冲区初始化以后, 输入函数将从缓冲区中读取所请求的数据... 同时, 文件位置指示器被置为紧随最后一个被读取字符的位置... 因为stdio.h 定义的所有输入函数都使用同一个缓冲区, 所以任何一个被调函数都将在前一次任何函数调用停止的地方继续开始.

 

当输入函数检测到已经读取了缓冲区中的全部字符时, 会请求系统将下一块缓冲区大小的数据复制到缓冲区... 通过这种方式, 输入函数可以读入文件中的全部内容, 直到文件的结尾... 函数在读入最后一缓冲区数据的最后一个字符后, 会将文件结尾指示器的值设置为真, 于是乎... 下一个被调用的输入函数将返回EOF...

 

相同的方式, 输出函数将数据写到缓冲区.. 当缓冲区满时, 就将数据复制到文件中...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值