以下程序显示了缓冲I / O如何在程序中出现问题,例如“除以零”等错误。发生:
int main()
{
int a = 1, b = 0, c;
printf("Dividing...");
c = a/b;
printf("Answer is: %d\n", c);
return 0;
}
输出为Floating point exception (core dumped)
。
足够公平。但令人惊讶的是,如果我将第一个printf更改为printf("Dividing...\n");
,那么该文本实际上会在程序崩溃之前打印出来(顺便说一句,我在Linux上运行GCC)。
我是否可以得出结论,添加换行符相当于刷新?如果是这样,如果我的所有printf()
字符串都以\n
结尾,那么我实际上是在剥夺自己的缓冲I / O的好处吗?
答案 0 :(得分:4)
如果您的标准输出要转到终端,是的,它等于刷新,因为printf()
将使用基于行的缓冲。
如果它被重定向到文件,那么没有。在这种情况下,printf()
使用更大的缓冲区,通常对应于文件系统块大小或其他,以优化IO。