【发布时间】:2023-04-08 01:12:01
【问题描述】:
有时我们会以这种方式在代码中添加一些调试打印
printf("successfully reached at debug-point 1\n");
some code is here
printf("successfully reached at debug-point 2");
在最后一个printf 之后发生分段错误。
现在在这种情况下,只有 debug-point1 将在 stdio 上打印 debug-point 2 打印被写入 stdio 缓冲区但它没有被刷新,因为它没有得到 \n 所以我们认为在 debug-point1 之后发生了崩溃。
如果我以这种方式禁用 stdio 和 stderr 流的缓冲选项
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
那么,这样做安全吗?
为什么所有的流默认都是行缓冲的?
编辑:
通常为任何文件流默认分配的缓冲区大小是多少?我认为它取决于操作系统。我想了解Linux。
【问题讨论】:
标签: c linux stdout stderr buffering