gpt4 book ai didi

c - 使用 stdout 和 stderr 禁用缓冲是否安全?

转载 作者:IT王子 更新时间:2023-10-29 00:04:42 27 4
gpt4 key购买 nike

有时我们会以这种方式在我们的代码中放置一些调试打印

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 所以我们认为崩溃在调试点 1 之后发生。

为了解决这个问题,如果我用 stdiostderr 禁用缓冲选项,就像这样

setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);

那么,这样做安全吗?

为什么默认情况下所有流都是行缓冲的?

编辑:

通常为任何文件流默认分配的缓冲区大小是多少?我认为这取决于操作系统。我想了解 Linux。

最佳答案

why all stream are by default line buffered

出于性能原因,它们被缓冲。图书馆努力避免进行系统调用,因为它需要很长时间。并不是所有的都默认缓冲。例如,stderr 通常 是无缓冲的,stdout 仅在引用 tty 时才行缓冲。

then is this safe to do this?

禁用缓冲是安全的,但我必须说这不是最好的调试技术。

关于c - 使用 stdout 和 stderr 禁用缓冲是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9238576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com