📅  最后修改于: 2023-12-03 14:39:50.341000             🧑  作者: Mango
在 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;
}