遇到了一個(gè)很奇怪的問題,讀文件失敗。尤其是想要讀取特別小的文件的時(shí)候。
流程是:
數(shù)據(jù)流 -> 存入文件 -> 讀出文件數(shù)據(jù) -> 操作
開始懷疑文件沒有保存下來。
仔細(xì)查看了log, 文件的打開,寫入,關(guān)閉都是正常的。
唯一能想到的是,有可能數(shù)據(jù)在buffer里,關(guān)閉的時(shí)候,沒有沖刷(flush)。所以這個(gè)時(shí)間點(diǎn),去讀取文件,就會(huì)讀取失敗。
那操作系統(tǒng)什么時(shí)間會(huì)去flush buffer
查了一下linux manual。 關(guān)閉文件的時(shí)候,會(huì)去flush,所以關(guān)閉成功了,數(shù)據(jù)肯定會(huì)寫到文件里。
The fclose() function flushes the stream pointed to by stream
? ? ? (writing any buffered output data using fflush(3)) and closes the
? ? ? underlying file descriptor.
所以文件是寫入成功了的。 為什么會(huì)讀取失敗,其實(shí)是一個(gè)錯(cuò)誤的log,讀取數(shù)據(jù)后,操作失敗。
log準(zhǔn)確性很重要。