LinuxSir.cn,穿越时空的Linuxsir!

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

sleep的问题

[复制链接]
发表于 2005-6-13 13:12:14 | 显示全部楼层 |阅读模式

  1. #include <stdio.h>

  2. const int n = 5;

  3. int main(){
  4.     int i = 0;

  5.     printf("Waiting for %d seconds to exit ", n);

  6.     for(; i < n; i++){
  7.         sleep(1);
  8.         printf(".");
  9.     }

  10.     printf("\n");

  11.     return 0;
  12. }
复制代码


我想在第一个printf后边每一秒输出一个.,就像xp安装启动盘那样的

可是会延迟n秒以后把printf和n个.一起打印出来

怎么办呢?
发表于 2005-6-13 13:48:13 | 显示全部楼层
应该是因为缓存吧
用无缓冲试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-13 13:54:47 | 显示全部楼层
大蝦給講講吧
回复 支持 反对

使用道具 举报

发表于 2005-6-13 13:55:02 | 显示全部楼层
用fflush(stdout)
回复 支持 反对

使用道具 举报

发表于 2005-6-13 13:57:37 | 显示全部楼层
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.     int n = 5, i;
  5.     printf("wait for %d to continue\n", n);
  6.     setbuf(stdout, NULL);
  7.     for(i = 0; i < n; ++i)
  8.     {
  9.         sleep(1);
  10.         printf(".");
  11.     }
  12.     printf("\n");
  13.     return 0;
  14. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-13 14:19:46 | 显示全部楼层
好像用fflush不行,而setbuf可以

看暸它們的man,但是理解不深

可以給齣相關的網頁嗎?

謝謝!
回复 支持 反对

使用道具 举报

发表于 2005-6-13 14:29:04 | 显示全部楼层
有什么不好理解的!

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.     int n = 5, i;
  5.     printf("wait for %d to continue\n", n);
  6.     for(i = 0; i < n; ++i)
  7.     {
  8.         sleep(1);
  9.         printf(".");
  10.         fflush(stdout);
  11.     }
  12.     printf("\n");
  13.     return 0;
  14. }

复制代码

搞定
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-13 14:31:44 | 显示全部楼层
原来是放在for循环里边啊

我说的理解不深,是关于缓冲区的,这个缓冲区是指控制台的吧?
回复 支持 反对

使用道具 举报

发表于 2005-6-13 15:13:41 | 显示全部楼层
use this function "setitimer"
回复 支持 反对

使用道具 举报

发表于 2005-6-13 19:32:18 | 显示全部楼层
Post by macarthor
原来是放在for循环里边啊

我说的理解不深,是关于缓冲区的,这个缓冲区是指控制台的吧?

apue里解释的够详细了,去看看吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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