C语言 <stdio.h> setvbuf() 函数

  • 描述

    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 - 这是指向标识打开流的FILE对象的指针。
    • buffer - 这是用户分配的缓冲区。如果设置为NULL,则该函数自动分配指定大小的缓冲区。
    • mode - 这指定了文件缓冲的模式,如下-
      • _IOFBF 完全缓冲 -输出时,一旦缓冲已满,就写入数据。在输入时,当请求输入操作且缓冲区为空时,缓冲区将被填充。
      • _IOLBF 行缓冲 -在输出时,当在流中插入换行符或缓冲区已满时,将写入数据,以此类推。在输入时,当请求输入操作且缓冲区为空时,缓冲区将填充到下一个换行符。
      • _IONBF 无缓冲 -不使用缓冲。每个I/O操作均应尽快写入。buffer和size参数将被忽略。
    • size-这是字节的缓冲区大小
  • 返回值

    成功时此函数返回零,否则返回非零值。
    示例
    以下示例显示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 jc2182.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 jc2182.com
    This output will go into buff
    and this will appear when programm
    will come after sleeping 5 seconds