标准I/O库提供缓冲的目的是尽可能减少使用read和write调用的次数。它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。

标准I/O提供了以下三种类型的缓冲。

  1. 全缓冲:
  2. 行缓冲:

对任何一个给定的流,如果我们并不喜欢这些系统默认,则可调用下列两个函数中的一个更改缓冲类型。

#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,此函数将导致所有输出流被冲洗。

results matching ""

    No results matching ""