C - fflush(stdout)的含义

时间:2016-05-19 11:10:47

标签: c

除了刷新输出缓冲区之外,fflush(stdout)还做了什么

或者做什么冲洗输出缓冲区意味着什么?

因为在调度程序中,我只是通过向上下文切换中抛出fflush(stdout)来解决了一个段错误,即使出于调试目的,所有对stdout的写入都已被禁用,这一点 - 就我而言#39;我担心 - 应该使任何类型的冲洗过时。

2 个答案:

答案 0 :(得分:3)

对于输出流,具有非​​空参数的fflush()将来自流缓冲区的任何未写入数据写入关联的输出设备。它是如何做到这一点取决于实现。

  

因为在调度程序中,我只是通过抛出一个段来解决了一个段错误   fflush(stdout)进入上下文切换

您可以在计划开始时明确关闭stdout以验证您的发现。很有可能问题出在其他地方,或者系统上的流实现有问题。

答案 1 :(得分:1)

如果没有看到实际的代码,我们只能推测。

但是,向函数添加更多代码可能会间接影响程序中的内存布局。更改的性质 - 如果有的话 - 取决于函数的作用(它分配内存,声明大量变量等),操作系统在运行时如何管理内存中的可执行代码等等。

在代码的其他地方,可能存在无效操作(使用指针进行无效操作等),并且附加语句的效果只是通过更改程序对受影响的内存执行的操作来改变症状

我认为fflush()中存在错误是远程可能的。但我不打赌它 - 许多人使用像fflush()这样的标准I / O函数,并且在已存在一段时间的库中使用此类函数中的错误(例如,来自已发布多个版本的供应商)版本)可能在历史上被发现,报告和修复。