除了刷新输出缓冲区之外,fflush(stdout)还能做什么吗?
或者,刷新输出缓冲区意味着什么?
因为在调度程序中,我只是通过向上下文开关中抛出一个fflush(stdout)来解决一个分段错误,即使出于调试的目的,对stdout的所有写入都已被禁用,就我而言,这应该会使任何类型的刷新过时。
发布于 2016-05-19 11:24:19
对于输出流,带有非空参数的fflush()将任何未写入的数据从流的缓冲区写入相关的输出设备。它是如何做到这一点的是与实现有关的。
因为在调度程序中,我只是通过向上下文开关中抛出一个
fflush(stdout)来解决一个分段错误。
您可以在程序开始时显式关闭stdout以验证您的发现。很有可能问题在其他地方,或者您的系统上的流实现是错误的。
发布于 2016-05-19 11:44:14
没有看到实际的代码,我们只能推测。
但是,向函数中添加更多的代码可能会间接地改变程序中的内存布局。更改的性质--如果有的话--取决于函数所做的事情(它是否分配内存、声明许多变量等等)、操作系统在运行时如何管理内存中的可执行代码等等。
在代码的其他地方,可能存在无效操作(带有指针的无效操作等),附加语句的效果只是通过更改程序对受影响内存所做的操作来改变症状。
我认为fflush()中可能存在一个bug。但我不敢打赌,像fflush()这样的标准I/O函数被很多人使用,在一个已经存在了一段时间的函数库中(例如,从一个发布了几个版本的供应商那里),它可能会被发现、报告和修复。
https://stackoverflow.com/questions/37321462
复制相似问题