Re: Linux 上面讀取檔案發生超奇怪問題

看板LinuxDev作者 ( 殺手哥吉拉 13)時間15年前 (2009/04/14 03:31), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《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
文章代碼(AID): #19uvCTFC (LinuxDev)
討論串 (同標題文章)
文章代碼(AID): #19uvCTFC (LinuxDev)