- 缓冲意义及类型
标准I/O库提供缓冲存在的目的是为了减少使用read和write的调用次数。
缓冲有以下三种类型:
(1)全缓冲:流满了再刷新,是强制的。
(2)无缓冲:比如stderr,流被填充了内容立刻输出
(3)行缓冲:这个流收到了换行符就会输出并刷新流,比如printf(输出到stdout)
- fflush函数
注释了下面的fflush函数,那么程序将不会打印任何内容,因为printf指向的流是行缓冲,没收到换行符,时不可以输出的
int main(int argc, char **argv) { printf("Before while(1)"); // fflush(stdout); // 刷新stdout流 while (1) ; printf("after while()"); // fflush(NULL); exit(0); }
如果把printf("Before while(1)");改为printf("Before while(1)\n"); // 加入换行符,即可看到打印内容
也可以不变,加入上面注释的fflush(stdout); 也可看到打印。
-
setvbuf()函数
setvbuf就是用来修改缓冲模式的函数(最开始讲的三种)一般不怎么用。