int setvbuf(FILE *stream, char *buffer, int mode, size
优质
小牛编辑
125浏览
2023-12-01
描述 (Description)
C库函数int setvbuf(FILE *stream, char *buffer, int mode, size_t size)定义了如何缓冲流。
声明 (Declaration)
以下是setvbuf()函数的声明。
int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
参数 (Parameters)
stream - 这是指向标识开放流的FILE对象的指针。
buffer - 这是用户分配的缓冲区。 如果设置为NULL,则该函数自动分配指定大小的缓冲区。
mode - 指定文件缓冲的模式 -
Sr.No. | 模式和说明 |
---|---|
1 | _IOFBF Full buffering - 输出时,一旦缓冲区已满,就会写入数据。 On输入在请求输入操作且缓冲区为空时填充缓冲区。 |
2 | _IOLBF Line buffering - 在输出时,在将换行符插入流中或缓冲区已满时写入数据,首先发生的事情。 在输入时,当请求输入操作且缓冲区为空时,缓冲区将填充到下一个换行符。 |
3 | _IONBF No buffering - 没有使用缓冲区。 每个I/O操作都会尽快写入。 缓冲区和大小参数将被忽略。 |
size - 这是缓冲区大小(以字节为单位)
返回值 (Return Value)
此函数在成功时返回零,返回非零值。
例子 (Example)
以下示例显示了setvbuf()函数的用法。
#include <stdio.h>
int main () {
char buff[1024];
memset( buff, '\0', sizeof( buff ));
fprintf(stdout, "Going to set full buffering on\n");
setvbuf(stdout, buff, _IOFBF, 1024);
fprintf(stdout, "This is iowiki.com\n");
fprintf(stdout, "This output will go into buff\n");
fflush( stdout );
fprintf(stdout, "and this will appear when programm\n");
fprintf(stdout, "will come after sleeping 5 seconds\n");
sleep(5);
return(0);
}
让我们编译并运行上面的程序来产生以下结果。 这里程序一直缓冲输出到buff直到它面对fflush()的第一次调用,之后它再次开始缓冲输出,最后睡眠5秒。 它会在程序发出之前将剩余的输出发送到STDOUT。
Going to set full buffering on
This is iowiki.com
This output will go into buff
and this will appear when programm
will come after sleeping 5 seconds