LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2214|回复: 2

为何需要fflush(stdout)?

[复制链接]
发表于 2003-10-19 10:06:27 | 显示全部楼层 |阅读模式
下面是一个函数print,作用是一次显示一屏

  1. --------------------------------------------------------------
  2. print(fp,pagesize) /*print fp in pagesize chunks */
  3. FILE *fp;
  4. int pagesize;
  5. {
  6.    static int lines=0;
  7.    char buf[BUFSIZ];
  8.    while(fgets(buf,sizeof buf,fp)!=NULL)
  9.       if(++lines<pagesize)
  10.          fputs(buf,stdout);
  11.       else {
  12.          buf[strlen(buf)-1]='\0';
  13.          fputs(buf,stdout);
  14.          fflush(stdout);  /*迫使系统输出缓冲中的所有内容*/
  15.          ttyin();   /*用于在每屏显示完后读入用户的响应*/
  16.          lines=0;
  17.      }
  18. }
  19. --------------------------------------------------------------
复制代码

疑问:既然有fputs(buf,stdout);为何还需要fflush(stdout);?
发表于 2003-10-20 08:36:25 | 显示全部楼层
用fflush是为了防止在流的读、写之间可能会发生某些相互作用。如果将流设置为不带缓存的,或者使用不带缓存的i/o(这时只能用read来读字符)则不用再使用fflush。
发表于 2003-10-20 10:11:29 | 显示全部楼层
在某些实时性比较强的场合,需要数据及时的达到目的地,这种时候缓存反而会造成数据传送延迟。fflush()就是强制把数据从数据缓冲区发出去,而不是等到数据达到一定的量之后才发送。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表