一、缓冲区的目的
二、缓冲区的分类
①全缓冲
- 概念:当填满缓冲区后才进行实际I/O操作
- 对于驻留在磁盘上的文件通常是由标准I/O库实施全缓存的
②行缓冲
- 概念:当遇到换行符时,才执行IO操作
- 即使没有遇到换行符,但是缓冲区满了也进行刷新缓冲区了
③无缓冲
- 概念:不进行缓冲,直接进行IO操作
注意事项:
- 打开至终端设备的流一般是行缓冲
- 标准错误是无缓冲的
- 其他都是全缓冲的
三、设置缓冲区
#include <stdio.h>
void setbuf(FILE *restrict fp, char *restrict buf );
int setvbuf(FILE *restrict fp, char *restrict buf, int mode,size_t size);
//返回值:成功返回0;出错返回非0
注意事项
- 这两个函数一定要在参数1的流打开之后调用
setbuf
- 功能:此函数用来将参数1所指向的流进行关闭/打开缓冲机制
使用
- ①如果参数2位NULL,则参数1所指向的流被设置为无缓冲
- ②参数buf必须指向于一个长度为BUFSIZ常量的缓冲区(该常量定义在<stdio.h>中),设置之后该流就是全缓冲了。但是如果该流与一个终端设备相关,那么某些系统也可将其设置为行缓存的
setvbuf
- 功能:此函数提供了各个选项用来设置流的缓冲机制
使用
- mode为_IOFBF:全缓冲。buf和size指向于一个缓冲区和该缓冲区的大小
- mode为_IOLBF:行缓冲。buf和size指向于一个缓冲区和该缓冲区的大小
- mode为_IONBF:无缓冲。buf和size可以忽略
如果该流是带缓存的,而buf是NULL,则标准I/O库将自动地为该流分配适当长度的缓存(适当长度指的是常量BUFSIZ所指定的值)
注意事项
四、刷冲缓冲区函数
#include <stdio.h>
int fflush(FILE *fp);
- 功能:此函数使该流所有未写的数据都被传递至内核。
- 注意事项:如果fp是NULL,则此函数刷新所有输出流