【发布时间】:2009-09-11 12:58:25
【问题描述】:
我写了一个printf() 声明如下:
printf("hello\n");
这在使用 Linux 的 gcc 编译器构建时可以正常工作。但是,如果我写
printf("hello");
打印没有出现在屏幕上。似乎有一些缓冲机制?谁能给我更多关于这方面的信息?
【问题讨论】:
我写了一个printf() 声明如下:
printf("hello\n");
这在使用 Linux 的 gcc 编译器构建时可以正常工作。但是,如果我写
printf("hello");
打印没有出现在屏幕上。似乎有一些缓冲机制?谁能给我更多关于这方面的信息?
【问题讨论】:
尝试拨打fflush()。通常写入屏幕或文件非常昂贵,因此数据会被缓冲直到需要写入。一个 \n 通常就足够了(缓冲区通常一次只存储 1 行),但如果您需要刷新缓冲区 - 使用该刷新调用。
【讨论】:
即使缓冲不是问题,如果您不打印换行符,您的 shell 提示符可能会破坏输出。
我不确定您在哪个环境中运行它,但是如果您在 unix shell 中使用 gcc 并且在程序结束时执行 printf("hello") 它之前不会打印换行符将显示您的 shell 提示符。提示将打印在同一行,有时会根据您设置的提示类型覆盖整行。
【讨论】:
我在here 上发布了有关 Windows 上无缓冲 IO 的信息。
但它是对 setvbuf 的标准 c 调用
setvbuf(stdout, (char *)NULL, _IONBF, 0); //unbuffered stdout
【讨论】: