缓冲(UNIX环境高级编程笔记)

  标准I/O库提供缓冲的目的是尽可能的减少read和write调用的次数。
  标准I/O提供了3种类型的缓冲:
  (1)全缓冲:在这种情况下,只有在填满标准I/O缓冲区之后才进行实际I/O操作。
  (2)行缓冲:在这种情况下,当输入和输出遇到换行符时,标准I/O库执行I/O操作。(如果缓冲区被填满,无论有无换行符都进行I/O操作)。
  (3)不带缓冲:标准I/O库不对字符进行缓冲存储。
  标准错误刘stderr通常是 不带缓冲的。
  对于任何一个给定的流,如果我们并不喜欢这些系统默认,则可调用下列两个函数中的一个更改缓冲类型。

#include <stdio.h>
void setbuf(FILE *restrict fp, char *restrict buf);
int set buf(FILE *restrict fp, char *restrict buf,int mode, size_t size);
        返回值:若成功,返回0;若出错,返回非0

  这些函数一定要在流已经被打开之后调用,而且也应该在对流执行任何一个其他操作之前调用。
  可以使用setbuf函数打开或关闭缓冲机制。为了带缓冲进行I/O,参数buf必须指向一个长度为BUFSIZ的缓冲区。
  若需要关闭缓冲,可将buf设置为NULL。
  使用setvbuf,可以用mode参数精确说明所需的缓冲类型。
  _IOFBF  全缓冲
  _IOLBF  行缓冲
  _IONBF  不带缓冲
  如果指定一个不带缓冲的流,则忽略buf和size的参数。
  斜土列出了这两个函数的动作,以及它们的各个选项。
缓冲(UNIX环境高级编程笔记)
  任何时候我们都可以强制冲洗一个流。

#include <stdio.h>
int fflush(FILE *fp);

  此函数使该流所有未写的数据都被传送至内核。作为一种特殊情况,若fp为NULL,则该函数将导致所有输出流被冲洗。