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

_IOFBF _IOLBF _IONBF宏


概要:
#define _IOFBF value //value值由具体实现定义。
#define _IOLBF value //value值由具体实现定义。
#define _IONBF value //value值由具体实现定义。

描述:
英文解释 描述
_IOFBF fully buffered 全缓冲:字符会被累积;当缓冲填满后,缓冲内的字符作为块传输。
_IOLBF line buffered 行缓冲:字符会被累积;当缓冲填满后或者遇到换行符时,缓冲内的字符作为块传输。
_IONBF unbuffered 无缓冲:字符会被尽快地传输。

以上宏是ISO/IEC 9899:2018标准中定义的缓冲宏,这些宏会扩展为不同值的整型常量表达式。这些宏适合用作setvbuf函数的第三个参数。


GCC编译器<stdio.h>头文件中,上述三个宏的定义如下所示:

#define  _IOFBF  0x0000

#define  _IOLBF  0x0040

#define  _IONBF  0x0004

对于某些系统,会提供行缓冲;但对于Win32,宏_IOLBF与宏_IOFBF行为相同


范例:
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 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
/*宏_IOFBF、_IOLBF、_IONBF范例*/

#include <stdio.h>

int main(void)
{
    char bufferOne[BUFSIZ];
    char bufferTwo[BUFSIZ];
    FILE *pFileOne;
    FILE *pFileTwo;
    FILE *pFileThree;

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

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

    /*创建第三个文件。*/
    pFileThree = fopen("fileThree.txt", "w");
    if(pFileThree)
    {
        if(setvbuf(pFileThree, NULL, _IONBF, 0) == 0)
            fputs("The start is what stops most people.", pFileThree);
    }
    fclose(pFileThree);

    return 0;
}


结果:

使用三种不同的缓冲模式创建了三个内容均为"The start is what stops most people."的文件。


相关内容:
setvbuf 设置流缓冲的函数。