📜  C++ setvbuf()(1)

📅  最后修改于: 2023-12-03 14:39:50.341000             🧑  作者: Mango

C++ 中的 setvbuf()

在 C 和 C++ 中,setvbuf() 函数用于设置文件流的缓冲大小、类型和位置等参数。

函数原型
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
  • stream:指向需要设置缓冲区的文件流。
  • buf:指向自定义缓冲区的指针,若为 NULL 则使用标准 I/O 库分配的缓冲区。
  • mode:设置缓冲类型,可选值为 _IOFBF(完全缓冲)、_IOLBF(行缓冲)和 _IONBF(无缓冲)。
  • size:指定缓冲区大小。
缓冲类型
  • _IOFBF:完全缓冲。即对于输出流,缓冲区满时才会触发 I/O 操作,对于输入流,则在读到缓冲区大小字节数后才会触发 I/O 操作。
  • _IOLBF:行缓冲。即对于输出流,直到遇到换行符或缓冲区满才会触发 I/O 操作,对于输入流,则每次读取数据都会触发 I/O 操作。
  • _IONBF:无缓冲。即不进行缓冲,每次都立即进行 I/O 操作。
示例
#include <stdio.h>

int main() {
    FILE *fp;
    char buf[1024];

    // 打开文件(读模式)
    fp = fopen("test.txt", "r");
    if (fp == NULL) {
        perror("Cannot open file");
        return 1;
    }

    // 设置行缓冲,缓冲区大小为 1024 字节
    if (setvbuf(fp, buf, _IOLBF, sizeof(buf)) != 0) {
        perror("Error setting buffer");
        return 1;
    }

    // 读取文件内容并输出到控制台
    int c;
    while ((c = fgetc(fp)) != EOF) {
        putchar(c);
    }

    // 关闭文件
    fclose(fp);

    return 0;
}
参考资料