没有 fflush(stdout) 则输出不打印

发布于 2024-12-18 12:57:03 字数 109 浏览 1 评论 0原文

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

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

I don't understand why sometimes I need to use fflush() and sometimes not.

My program is segfaulting at the moment and I am debugging it with print statements. When a program segfaults, does stdout not flush its buffer automatically?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

—━☆沉默づ 2024-12-25 12:57:03

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

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

当程序出现段错误时,stdout 是否不会刷新其缓冲区
自动?

Stdio 缓冲区由 exit 刷新。当信号(例如 SIGSEGV)终止进程时,exit 不会被调用。另一种退出进程而不刷新 stdio 缓冲区的方法是使用 Unix 特定的调用 _exit

I don't understand why sometimes I need to use fflush() and sometimes
not.

Sometimes the stdio buffers are flushed sometimes they aren't. For example simply including a "\n" in the printed stuff will typically flush it (because stdout is by default line-buffered when attached to a terminal).

When a program segfaults, does stdout not flush its buffer
automatically ?

Stdio buffers are flushed by exit. When a signal (such as SIGSEGV) kills a process, exit is not called. Another way to exit a process without flushing the stdio buffers is to use the Unix-specific call _exit.

听风念你 2024-12-25 12:57:03

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

(并且不要有人尝试为 SIGSEGV 注册信号处理程序。)

No, why should it. The program gets killed by the operating system. If a segfault occurs, the program is no longer in a meaningful state, so nothing can safely happen at that point other than immediate termination.

(And don't nobody try to register a signal handler for SIGSEGV.)

你穿错了嫁妆 2024-12-25 12:57:03

“我不明白为什么在这段代码中调用 fflush (stdout)
我尝试评论这一行,结果行为完全相同。”

因为如果这样的话,您不能保证看到以前的 printf() 输出
输出不以换行符结尾。

基本上,只有在显示提示而不显示提示时才需要它
换行符,并且您希望确保用户可以看到它。

请参阅此网站

"I cannot figure out why fflush (stdout) is called here in this code
I try to comment this line and behavior was exactly the same."

Because you're not guaranteed to see previous printf() output if that
output doesn't end in a newline.

Basically, you only need it if you're displaying say a prompt without
a newline, and you want to make sure the user can see it.

See this site.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文