当前位置: 技术问答>linux和unix
基本的printf问题?
来源: 互联网 发布时间:2016-05-23
本文导语: #include #include int main() { printf("***********"); sleep(4); return 0; } 如上代码的输出是先睡眠4秒,再输出* 为什么不是先输出*,再睡眠4秒啊? OS: RH9.0 请各位大虾帮帮忙? | 加'n' IO缓冲的原因 |...
#include
#include
int main()
{
printf("***********");
sleep(4);
return 0;
}
如上代码的输出是先睡眠4秒,再输出*
为什么不是先输出*,再睡眠4秒啊?
OS: RH9.0
请各位大虾帮帮忙?
|
加'n'
IO缓冲的原因
IO缓冲的原因
|
标准输入输出函数是带缓冲的
lz 可以加个 'n' 或者 fflush(stdout)
lz 可以加个 'n' 或者 fflush(stdout)
|
行缓冲不是stdin stdout的属性,比如你重定向了标准备输入输出后就不是行缓冲了.
行缓冲是终端设备的属性.而程序的默入输入输也就是终商设备所以会这样.
行缓冲是终端设备的属性.而程序的默入输入输也就是终商设备所以会这样.
|
linux unix os! 刷新 行缓冲 是以'n'为标志的!
stevens先生有讲过
详情见
stevens先生有讲过
详情见
|
晕,带缓冲就在缓冲里,并没有直接打到设备上去。等你程序退出的时候会有刷新缓冲区的动作,这个时候你的输出才会被输出到设备上去。
你用不带缓冲的write()写标准输出就不会有你说的问题了。
你用不带缓冲的write()写标准输出就不会有你说的问题了。
|
因为你没有刷新缓冲区。
#include
#include
int main()
{
printf("***********n"); //这样就可以了
sleep(4);
return 0;
}
|
默认的 stdin stdout 是行缓冲,也就是它只有看到 'n'时 才开始刷新缓冲区。
你不加'n' 也可以,记得fflush就可以了。
你不加'n' 也可以,记得fflush就可以了。
|
UP!
|
虽然看似是个很简单的问题 但的确学到点东西