遇到了一个很奇怪的问题,读文件失败。尤其是想要读取特别小的文件的时候。
流程是:
数据流 -> 存入文件 -> 读出文件数据 -> 操作
开始怀疑文件没有保存下来。
仔细查看了log, 文件的打开,写入,关闭都是正常的。
唯一能想到的是,有可能数据在buffer里,关闭的时候,没有冲刷(flush)。所以这个时间点,去读取文件,就会读取失败。
那操作系统什么时间会去flush buffer
查了一下linux manual。 关闭文件的时候,会去flush,所以关闭成功了,数据肯定会写到文件里。
The fclose() function flushes the stream pointed to by stream
(writing any buffered output data using fflush(3)) and closes the
underlying file descriptor.
所以文件是写入成功了的。 为什么会读取失败,其实是一个错误的log,读取数据后,操作失败。
log准确性很重要。