setvbuf() - C语言库函数
C库函数 int setvbuf(FILE *stream, char *buffer, int mode, size_t size) 定义了如何流应该被缓冲。
声明
下面是函数setvbuf()函数的声明。
int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
参数
-
stream -- 这是一个文件对象标识一个开放的流指针。
-
buffer -- 这是用户分配的缓冲区。如果设置为NULL,该函数会自动分配一个指定大小的缓冲区。
-
mode -- 此指定文件缓冲模式:
mode | 描述 |
---|---|
_IOFBF | Full buffering: 在输出时,数据被写入一旦缓冲区已满。在输入缓冲区填满时,输入操作要求和缓冲区是空的。 |
_IOLBF | Line buffering: 在输出时,数据被写入到流或缓冲区满时,无论发生什么事时,当插入一个换行符。在输入缓冲区充满时要求输入操作,直到下一个换行符,缓冲区为空。 |
_IONBF | No buffering: 不使用缓冲区。每个I/O操作,尽快写入。缓冲区和大小的参数将被忽略。 |
-
size -- 这是一个缓冲区的大小(以字节为单位)
返回值
这个函数返回其他成功返回0,则返回非零值。
例子
下面的例子显示了函数setvbuf()函数的用法。
#include <stdio.h> int main() { char buff[1024]; memset( buff, '\0', sizeof( buff )); fprintf(stdout, "Going to set full buffering on "); setvbuf(stdout, buff, _IOFBF, 1024); fprintf(stdout, "This is gitbook.net "); fprintf(stdout, "This output will go into buff "); fflush( stdout ); fprintf(stdout, "and this will appear when programm "); fprintf(stdout, "will come after sleeping 5 seconds "); sleep(5); return(0); }
让我们编译和运行上面的程序,这将产生以下结果。在这里,程序保持缓冲到输出的buff,直到它面临的第一次调用到fflush() 后,再次开始缓冲输出,,终于睡5秒钟。发送剩余的输出到标准输出程序出来之前。
Going to set full buffering on This is gitbook.net This output will go into buff and this will appear when programm will come after sleeping 5 seconds