我不明白为什么有时候我需要使用fflush()
,有时候不需要。
我的程序目前是segfaulting,我正在使用print语句进行调试。程序段错误时,stdout
是否自动刷新缓冲区?
答案 0 :(得分:8)
我不明白为什么有时候我需要使用fflush() 不
有时候stdio
缓冲区会刷新,有时它们不会刷新。例如,在打印的东西中简单地包含“\ n”通常会刷新它(因为stdout
在连接到终端时默认是行缓冲的。)
当程序发生段错误时,stdout不会刷新其缓冲区 自动?
Stdio缓冲区由exit
刷新。当某个信号(例如SIGSEGV
)杀死某个流程时, exit
不会被称为。在不刷新stdio
缓冲区的情况下退出进程的另一种方法是使用特定于Unix的调用_exit
。
答案 1 :(得分:1)
不,为什么要这样。该程序被操作系统杀死。如果发生段错误,程序将不再处于有意义的状态,因此除了立即终止之外, 可以安全地发生在该点上。
(并且没有人试图为SIGSEGV
注册信号处理程序。)
答案 2 :(得分:0)
“我无法弄清楚为什么在此代码中调用fflush(stdout) 我试着评论这一行,行为完全一样。“
因为你不能保证看到之前的printf()输出 输出不以换行结束。
基本上,如果你显示没有提示,你只需要它 换行符,并且您希望确保用户可以看到它。
请参阅this site.