Re: Linux 上面讀取檔案發生超奇怪問題
※ 引述《yoco315 (眠月)》之銘言:
: ※ [本文轉錄自 C_and_CPP 看板]
: 作者: yoco315 (眠月) 看板: C_and_CPP
: 標題: Linux 上面讀取檔案發生超奇怪問題
: 時間: Mon Apr 13 14:26:36 2009
: 當 [1] 的地方,已經把檔案寫好了,而且也 fclose() 關閉檔案了。
: 在 [2] 的地方,fopen 有拿到東西,不是 NULL,但是當我要讀取的時候,卻什麼也讀不到。
: 我呼叫 perror(),系統給的錯誤訊息是「No such file or directory.」
: 問題是我開檔的時候明明開到了!
: 事情真的很奇怪,
: 這個現象不是永遠都發生,只有「有時候」發生。
: 如果我在 [2] 之前 sleep() 一段時間,
: 那我就可以順利讀取到檔案。
剛剛問強者我同事的結果,給你做一點參考
Tick@0xlab says:
[02:27:46] 如果 fs mount 時為 async (一般都是) 在寫檔時,真實的動作會在
function 回應你之後才做
[02:28:17] 寫檔之時,可能會寫到另一個 inode
[02:28:28] 而且 unlink 本來的 inode
[02:28:50] 雖然檔名相同,但 inode 不同
[02:30:06] 開檔時可能 inode 還在,但要讀時,inode 比改掉了
[02:30:59] 本來的方法可以 work 的原因是,因為都在等 fs 的 flag
[02:31:18] 一定要等到 fs 真實寫入後才讀得到
[02:31:24] 所以不會出錯
[02:31:34] 但一定會等很久
[02:32:08] 所以我的建議是在 [1] 之後 client 要先做一個 sync
[02:32:25] 才發封包
[02:32:45] master 其實也是相同的。
[02:35:46] fsync fdatasync
--
隨手關電腦,救救北極熊
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.177.157
討論串 (同標題文章)
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章