gcc的 printf 和 缓冲区的问题(关于fflush 函数)
2010-06-28 21:58
1131 查看
以下程序只是为了在终端上不断连续输出->而已,但是在没有加fflush之前发现根本无法向屏幕打印任何内容。为什么以前从来没有发现
printf的这种特性呢?后来想到,以前在用printf时多收情况下都会在字符串尾部加一个/n。或者没有加/n,但是你的程序不是一个dead
loop,便也不会牵扯到问题,因为就算执行printf后只是将内容送到缓冲区,但是你到程序结束里,程序结束便会导致缓冲区刷新,你便看到你到屏幕上
有你期望到东西出现了。所以我最后得到一个这样到结论:printf会把东西送到缓冲区,而如果缓冲区不刷新到话,你便不会在屏幕上看到东西,而能导致缓
冲区刷新到情况有这些:1 强制刷新 fflush;2,放到缓冲区到内容中包含/n /r
;3,缓冲区已满;4,需要从缓冲区拿东西到时候,如执行scanf;
但是这些问题在vc中都没有出现,所以这时编译器相关的!
#include
<stdio.h>
#include <unistd.h> //for sleep()
int
main(void)
{
printf("/nstart the dead loop/n");
while(1)
{
printf("/b->");
fflush(stdout);//刷新输出缓冲区,如果不做这个动作,上边的输出便不会显示到屏幕上,除非其中有换行操作或者缓冲区,这也许就是所谓
到终端行规程吧。
usleep(100000);
}
return 1;
}
printf的这种特性呢?后来想到,以前在用printf时多收情况下都会在字符串尾部加一个/n。或者没有加/n,但是你的程序不是一个dead
loop,便也不会牵扯到问题,因为就算执行printf后只是将内容送到缓冲区,但是你到程序结束里,程序结束便会导致缓冲区刷新,你便看到你到屏幕上
有你期望到东西出现了。所以我最后得到一个这样到结论:printf会把东西送到缓冲区,而如果缓冲区不刷新到话,你便不会在屏幕上看到东西,而能导致缓
冲区刷新到情况有这些:1 强制刷新 fflush;2,放到缓冲区到内容中包含/n /r
;3,缓冲区已满;4,需要从缓冲区拿东西到时候,如执行scanf;
但是这些问题在vc中都没有出现,所以这时编译器相关的!
#include
<stdio.h>
#include <unistd.h> //for sleep()
int
main(void)
{
printf("/nstart the dead loop/n");
while(1)
{
printf("/b->");
fflush(stdout);//刷新输出缓冲区,如果不做这个动作,上边的输出便不会显示到屏幕上,除非其中有换行操作或者缓冲区,这也许就是所谓
到终端行规程吧。
usleep(100000);
}
return 1;
}
相关文章推荐
- printf函数缓冲区问题
- 关于fflush、缓冲区、scanf、EOF等问题真麻烦
- 关于fflush(stdin)的使用与scanf输入缓冲区的问题
- printf()函数关于不能打印字符的问题
- 关于用连续用多个scanf函数输入数据时前面的scanf函数会在缓冲区留下回车符的问题
- printf函数缓冲区问题
- 转一篇,关于fflush、缓冲区、scanf、EOF等问题
- 关于printf函数的返回值问题
- 关于C语言使用输入函数后键盘缓冲区还有多余字符没的问题
- 关于流和缓冲区的理解以及一般标准输入问题的解决方法小结 (fflush() setbuf() )
- 关于System.out.printf()函数 4000 出错问题
- 关于STM32中printf函数的重定向问题
- 关于printf函数的返回值问题
- 关于C语言中printf函数的一个问题
- 关于在stm32中使用printf函数的问题
- 关于CCS中如何设置printf函数的问题
- STM32中关于串口通信的printf()函数重定向问题
- STM32中关于串口通信的printf()函数重定向问题
- 关于stm32中printf函数重定向问题
- 关于fflush(stdin)的使用与scanf输入缓冲区的问题