在C ..中的sleep()行为?

时间:2012-10-31 06:30:32

标签: c linux sleep

  

可能重复:
  Why does printf not flush after the call unless a newline is in the format string?

我试图在论坛上回答一些问题,我遇到了很有趣的事情。 这是代码:

int main()
{
 int print_val = -1;

 while(1)
 {
  printf("%d \n", ++print_val);
  sleep(1);
 }
}

这很完美。现在乐趣进入..只需将第7行更改为 printf("%d ", ++print_val);(只需删除换行!)

现在没有输出..!

那么任何人都可以帮我理解sleep()函数的行为..?我认为需要看看sleep()而不是printf(),因为我尝试用fprintf()和putc()替换它,只给出相同的输出。

我在32位Ubuntu以及虚拟机中的32位Ubuntu上尝试过这段代码。

由于 阿多恩

1 个答案:

答案 0 :(得分:6)

我觉得问题在于刷新输出缓冲区。如果你没有在字符串的末尾添加'\ n',那么输出缓冲区将不会被刷新,printf将不会打印任何内容。它只会在输出缓冲区已满时开始打印。请查看this问题和this一个。