C 将换行符添加到printf()是否等同于刷新流?
以下程序显示了当发生“除以零”等错误时,缓冲I/O如何在程序中引起问题:C 将换行符添加到printf()是否等同于刷新流?,c,printf,C,Printf,以下程序显示了当发生“除以零”等错误时,缓冲I/O如何在程序中引起问题: int main() { int a = 1, b = 0, c; printf("Dividing..."); c = a/b; printf("Answer is: %d\n", c); return 0; } 输出为浮点异常(内核转储) 很公平。但令人惊讶的是,如果我将第一个printf更改为printf(“divising…\n”),这个文本实际上是在程序崩溃之前打印出
int main()
{
int a = 1, b = 0, c;
printf("Dividing...");
c = a/b;
printf("Answer is: %d\n", c);
return 0;
}
输出为浮点异常(内核转储)
很公平。但令人惊讶的是,如果我将第一个printf更改为printf(“divising…\n”)代码>,这个文本实际上是在程序崩溃之前打印出来的(顺便说一下,我在Linux上运行GCC)
我是否可以得出这样的结论:添加一条换行符等同于刷新?如果是这样的话,如果我所有的printf()
字符串都以\n
结尾,我实际上剥夺了缓冲I/O的好处?如果你的标准输出是到一个终端,是的,它等于刷新,因为printf()
将使用基于行的缓冲
如果它被重定向到一个文件,则不会。在本例中,printf()
使用更大的缓冲区,通常对应于文件系统块大小或其他什么,以优化IO。惊人的答案,我必须说,惊人的启示!:D