当前位置: C语言 -- 标准库 -- <stdio.h> -- setbuf

setbuf函数


概要:
#include <stdio.h>
void setbuf(FILE * restrict stream,
     char * restrict buf);

描述:

流缓冲是输入输出操作和物理文件之间起中介作用的数据块;以输出缓冲为例,数据先传输到缓冲,当缓冲填满后再进行刷新,将数据输出到物理文件。

setbuf函数可以设置参数stream指向流的缓冲;应在流和打开的文件关联后,并且未进行任何操作(失败的setbuf函数调用除外)前调用setbuf函数。

除了setbuf函数不返回值外,在参数buf不是空指针的情况下setbuf函数等价于setvbuf(stream, buf, _IOFBF, BUFSIZ),或者在参数buf是空指针的情况下等价于setvbuf(stream, NULL, _IONBF, 0)

流缓冲可以使用fflush函数显式刷新。当调用fclosefreopen函数或者程序正常终止(:这里程序正常终止是指main函数返回给宿主环境或者调用exit函数终止程序。)时也会自动刷新缓冲。


参数:
FILE * restrict stream

指向一个打开的流的指针。

char * restrict buf

指向缓冲的指针,缓冲大小至少为BUFSIZ个字节。


返回值:

无。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
/*函数setbuf范例*/

#include <stdio.h>

int main(void)
{
    char buffer[BUFSIZ];
    FILE *pFileOne;
    FILE *pFileTwo;

    /*创建第一个文件。*/
    pFileOne = fopen("fileOne.txt", "w");
    if(pFileOne)
    {
        setbuf(pFileOne, buffer);
        fputs("The start is what stops most people.", pFileOne);
    }
    fclose(pFileOne);

    /*创建第二个文件。*/
    pFileTwo = fopen("fileTwo.txt", "w");
    if(pFileTwo)
    {
        setbuf(pFileTwo, NULL);
        fputs("The start is what stops most people.", pFileTwo);
    }
    fclose(pFileTwo);

    return 0;
}


结果:

创建两个内容均为"The start is what stops most people."的文件;不同的是pFileOne是全缓冲的,数组buffer用作缓冲,而pFileTwo是无缓冲的。


相关内容:
BUFSIZ 表示缓冲大小的宏。
setvbuf 设置流缓冲的函数。