没有fflush输出不打印(stdout)

时间:2011-11-29 19:04:46

标签: c io stdout fflush

我不明白为什么有时候我需要使用fflush(),有时候不需要。

我的程序目前是segfaulting,我正在使用print语句进行调试。程序段错误时,stdout是否自动刷新缓冲区?

3 个答案:

答案 0 :(得分:8)

  

我不明白为什么有时候我需要使用fflush()   不

有时候stdio缓冲区会刷新,有时它们不会刷新。例如,在打印的东西中简单地包含“\ n”通常会刷新它(因为stdout在连接到终端时默认是行缓冲的。)

  

当程序发生段错误时,stdout不会刷新其缓冲区   自动?

Stdio缓冲区由exit刷新。当某个信号(例如SIGSEGV)杀死某个流程时, exit不会被称为。在不刷新stdio缓冲区的情况下退出进程的另一种方法是使用特定于Unix的调用_exit

答案 1 :(得分:1)

不,为什么要这样。该程序被操作系统杀死。如果发生段错误,程序将不再处于有意义的状态,因此除了立即终止之外, 可以安全地发生在该点上。

(并且没有人试图为SIGSEGV注册信号处理程序。)

答案 2 :(得分:0)

  

“我无法弄清楚为什么在此代码中调用fflush(stdout)   我试着评论这一行,行为完全一样。“

     

因为你不能保证看到之前的printf()输出   输出不以换行结束。

     

基本上,如果你显示没有提示,你只需要它   换行符,并且您希望确保用户可以看到它。

请参阅this site.