缓冲
来源:互联网 发布:菜鸟也会数据分析pdf 编辑:程序博客网 时间:2024/04/29 02:26
1.setbuf和setvbuf
1.1 setbuf改变stdout的行为
标准输出通常是行缓冲的,也就是遇到\n或者缓冲区满时才执行IO:
#include <unistd.h>#include <stdio.h>int main(){//setbuf(stdout,NULL);printf("ASD");sleep(1);printf("__\n");return 0;}执行的时候,会等待一秒,然后输出ASD__,而不是先输出ASD,再等待一秒,再输出__。
可以用setbuf(stdout,NULL)设置为无缓冲:
#include <unistd.h>#include <stdio.h>int main(){setbuf(stdout,NULL);printf("ASD");sleep(1);printf("__\n");return 0;}这时就会先输出ASD,等待一秒,再输出剩下的。
设置为全缓冲:
#include <unistd.h>#include <stdio.h>char buf[256];int main(){setbuf(stdout,buf);printf("ASD\n");sleep(1);printf("__\n");return 0;}
尽管第一个printf是有\n的,但是会等待一秒,最后全部一起输出。
或者使用setvbuf设置为全缓冲:
#include <unistd.h>#include <stdio.h>char buf[256];int main(){setvbuf(stdout, buf, _IOFBF, 256);//setvbuf(stdout,NULL, _IOFBF, 0);puts("ASD");sleep(1);puts("__");return 0;}
用setvbuf设置无缓冲:
#include <unistd.h>#include <stdio.h>char buf[256];int main(){setvbuf(stdout,NULL, _IONBF, 0);printf("a");sleep(1);puts("ASD");sleep(1);puts("__");return 0;}
设置长度为2的行缓冲:
#include <unistd.h>#include <stdio.h>char buf[256];int main(){setvbuf(stdout,NULL, _IOLBF, 2);printf("a");sleep(1);printf("AS");sleep(1);printf("__");return 0;}
- 缓冲
- 缓冲
- 缓冲
- 缓冲
- 缓冲
- 缓冲与非缓冲
- 缓冲与非缓冲
- php缓冲--ob缓冲
- 行缓冲、全缓冲、无缓冲
- 后备缓冲
- 文件缓冲
- 缓冲机制
- 顶点缓冲
- 缓冲输出
- 缓冲策略
- 缓冲流
- 帧缓冲
- 页面缓冲
- 黑马程序员-JAVA概述,JDK配置环境变量
- 安装 Eclipse插件 EasyExplorer
- VS 2012 编译64位JZMQ
- poj 2018
- vim配置文件
- 缓冲
- POJ 1860
- 第四届蓝桥杯C/C++本科A组-大臣的旅费
- 一份很好的linux kernel/ linux device development 的学习材料
- 神器 -webkit-animation
- 国内最火的五款HTML5前端开发框架
- C++标准库和系统API
- MYSQL中文乱码解决:
- HDU2222--Keywords Search