Chinaunix首页 | 论坛 | 博客
  • 博客访问: 264493
  • 博文数量: 52
  • 博客积分: 406
  • 博客等级: 一等列兵
  • 技术积分: 549
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-21 12:34
个人简介

......

文章分类

全部博文(52)

文章存档

2014年(1)

2013年(32)

2012年(19)

我的朋友

分类: LINUX

2013-06-30 17:13:10

1. prototype
    int fflush(FILE *stream);
    This function causes any buffered output onstream to be delivered to the file.
    This function returns EOF if a write error occurs, or zero otherwise.
2. example
   
  1. void main(void)
  2. {
  3.     int i = 0;
  4.     
  5.     for(i = 0; i<5; i++)
  6.     {
  7.         printf("%d", i); //notice no \n
  8.         //fflush(stdout);
  9.         sleep(1);
  10.     }
  11.  
  12. }
  a) 如果注释掉//fflush这行5s后会在屏幕上显示01234
  b) 如果添加上fflush这行屏幕上会隔1s输出一个数字, 也就是fflush这个函数起了作用,它强制刷新标准输出缓冲区。如果在你的程序中需要直接输出而不暂存缓冲区,可以采用这个函数。但有一点要注意这个函数不是C标准库函数,是对C的一个
       扩展函数,使用时要注意你的平台所采用的开发环境。
3. 顺便再介绍一下printf函数中的缓冲区
   调用printf函数也是把要输出的内容先写进标准输出缓冲区然后再在屏幕上显示,下面的5种情况可以使内容直接在屏幕上显示
  a) 调用fflush函数,强制刷新标准输出缓冲区
  b) 缓冲区已满,这种情况显而易见,有个疑问这个标准缓冲区有多大呢?
  c) \n \r字符出现时,这个就这么规定的。。。  在上面的例子中如果printf写成这个样子你就看不到调用fflush的区别:fprintf("%d\n", i)
  d) 程序结束的时候,这个也是显而易见的,这应该是程序退出时所做的清理工作
  e) scanf()函数要在缓冲区里取数据时会先将缓冲区刷新, 这种情况没明白,scanf()函数应该是从标准输入缓冲区里面读取数据啊,怎么去刷新输出缓冲区,难道这2个缓冲区是一个?



阅读(1832) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~