关于flush的一点体会
来源:互联网 发布:淘宝第三套人民币真假 编辑:程序博客网 时间:2024/04/29 22:33
原来c编程的时候也听说过flush只是没有细细研究。
前两天,老板布置我一个http长连接是否可行的问题,就是从server不停地向http client端发数据。
我用CGI编程,其中就是一个while循环,不停的printf某个字符。打算如下:
while(1)
{
...
printf("c");//
...
}
由于不想让这些c字符打印的太快,变修改如下
int count=0;
while(1)
{
...
printf("c");//
count++
sleep(1)
if (10 == count)]
{
...//do something
}
...
}
等程序编译好跑起来后,发现并不像设计的那样,一秒打印一个字符。找了好久也没有发现原因,去掉sleep(1)那行就好了。
可原因在哪呢?
原来查资料才发现,printf打印的时候是先到缓冲区,如果不到一定的程度就不会打印出来,也有人说printf是行缓冲的。
比如这样一个例子:
#include "stdio.h"
int main (int argc,char **argv)
{
while (1)
{
printf ("Hello World");
sleep(1);
}
return 0;
}
很简单吧,编译也成功,运行起来就不是一秒给你打印一个"Hello World"了,将上述代码换成如下两种方式就可以了:
第一:
#include "stdio.h"
int main (int argc,char **argv)
{
while (1)
{
printf ("Hello World");
fflush(stdout);
sleep(1);
}
return 0;
}
第二:
#include "stdio.h"
int main (int argc,char **argv)
{
while (1)
{
printf ("Hello World/n");
sleep(1);
}
return 0;
}
查了些资料,说是:
1. int fflush(FILE *stream);
会强迫将缓冲区内的数据写回参数stream所指定的文件中。
2. stdout,stdin有缓冲区,stderr没有缓冲区。
fflush()是为了把read或者write的数据立即送到stdout或者stdin那边
今天写在这里,提醒自己,以后碰到如此问题会想到办法,也提醒csdn的朋友。
Boatman 2010-8-27
- 关于flush的一点体会
- 关于逻辑的一点体会
- 关于线程的一点体会
- 关于读书的一点体会
- 关于学习的一点体会
- 关于傅里叶变换的一点体会
- 关于PostMessage与SendMessage的一点体会
- 关于自定义事件的一点体会
- 关于背单词的一点个人体会
- 关于管理方面的一点体会
- 关于C#发送邮件的一点体会
- 关于网页制作的一点体会
- 关于项目管理的一点体会
- 关于自定义事件的一点体会
- 关于自定义事件的一点体会
- 关于项目管理的一点体会
- 关于条件查询detachedCriteria的一点体会
- 关于stl sgi map的一点体会
- harris角点检测与ncc匹配
- 《C#编程之道》 之 C#面向对象编程的继承性(二)
- vc 树型控件中SetCheck()函数的使用
- richfaces组件使用补充
- Membership的配置和使用
- 关于flush的一点体会
- 新来乍到
- Maven2创建Struts 2.2.1项目
- 批处理命令大全
- passwd文件
- 论文笔记——Making Database Systems Usable
- 华杰2011年度MBA、MPA、MPAcc考前辅导班热招
- javaeye 评论前测试答案
- Subversion的安装与使用