标准I/O库提供缓冲的目的是尽可能减少使用read和write调用的次数。它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。
标准I/O提供了以下三种类型的缓冲。
- 全缓冲:
- 行缓冲:
对任何一个给定的流,如果我们并不喜欢这些系统默认,则可调用下列两个函数中的一个更改缓冲类型。
#include <stdio.h>
void setbuf(FILE *restrict fp, char *restrict buf);
void setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size);
使用setvbuf,我们可以精确地说明所需的缓冲类型。这是用mode参数实现的:
_IOFBF 全缓冲
_IOLBF 行缓冲
_IONBF 不带缓冲
如果指定一个不带缓冲的流,则忽略buf和size参数。如果指定全缓冲或行缓冲,则buf和size可选择地指定一个缓冲区及其长度。如果该流是带缓冲的,而buf是NULL,则标准I/O库将自动地为该刘分配适当长度的缓冲区。适当的长度指的是由常量BUFSIZE指定的值。
任何时候,我们都可强制冲洗一个流。
#include <stdio.h>
int fflush(FILE *fp);
此函数使所有未写的数据都被传送至内核。作为一种特殊情形,如若fp是NULL,此函数将导致所有输出流被冲洗。