Re: [問題] 關於讀檔和寫檔

看板C_and_CPP作者 (下班後才下棋)時間16年前 (2009/12/21 01:18), 編輯推噓17(1705)
留言22則, 14人參與, 最新討論串4/5 (看更多)
※ 引述《LPH66 ((short)(-15074))》之銘言: : 順便藉這個機會寫一下簡易版 fopen mode string 的分別法: : "r" 從頭開始讀、不洗掉內容 : "w" 從頭開始寫入、洗掉內容 : "a" 從尾巴開始寫入、不洗掉內容 : 附上一個 "+" 就是都改成讀寫 : 不過一般如果真要用同時讀寫來 update 的話 通常是開成 "r+" : 因為 "a+" 在檔案的內部指標不在最後面時寫入似乎會發生奇怪的現象 : 然後是 : "t" 開成文字模式 : "b" 開成二進位模式 其實 win32 裡的 fopen 還有很多奇奇怪怪的 mode 像是 c, n, N, S, R, T, D 可以參考 http://msdn.microsoft.com/en-us/library/yeby3zcb%28VS.80%29.aspx 分享其中一個例子 c 之前遇過某一隻程式 他需要很頻繁的更新同一個檔案 但是好死不死當無預警的重開機發生了 (比如說停電、被踢到插頭) 他所更新的檔案有時候就會變成全是 0 的壞檔! 這是可複製的 bug 像是 fflush 、寫完馬上 fclose 都用了就是沒有任何幫助 找了很久發現原來是因為 win32 的 fflush fclose 都不保證寫進 disk (!) 也許和 OS 在 I/O 的處理上, 使用 disk cache 的機制有關 總之要確保一定會寫到 disk 裡, 就是要加上 mode c 比如說 fopen(filename, "wc"); // commit flag 經實測, 真的再怎麼亂重開機, 原本的問題都不會發生了 感覺 M$ 在這方面下了不少功夫 (我想主要是為了 I/O 的效率) 所以為了不要動不動被 side effect 給婊到 有問題時勤讀 manual 我想是個很重要的習慣... orz -- 有時候,遺忘,是令人快樂的。什麼時候?當然是有人傷了你的心的時候。  存心傷你的那個人,固然是故意和你過不去,但是被傷了心而耿耿於懷的你  ,卻是和自己過不去了。所以,記性不好的人,通常會是比較快樂的人,也  是比較不容易被擊倒的人。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.49

12/21 03:00, , 1F
12/21 03:00, 1F

12/21 09:19, , 2F
推"動不動被 side effect 給婊到" XD
12/21 09:19, 2F

12/21 10:03, , 3F
這個也是要大推推, 避免OS cache的機制很重要:)
12/21 10:03, 3F

12/21 10:03, , 4F
^^為什麼會多打一個字....Orz
12/21 10:03, 4F

12/21 10:14, , 5F
推一個,很實用
12/21 10:14, 5F

12/21 11:48, , 6F
三樓在裝可愛!!!
12/21 11:48, 6F

12/21 11:59, , 7F
WC 囧
12/21 11:59, 7F

12/21 12:22, , 8F
(抱頭)不~~砂鍋大的誤會啊....Q_Q~
12/21 12:22, 8F

12/21 12:28, , 9F
其實,樓上應該想那樣做很久了.
12/21 12:28, 9F

12/21 12:28, , 10F
XD
12/21 12:28, 10F

12/21 12:29, , 11F
我也要推推 不要噓噓(?)
12/21 12:29, 11F

12/21 13:59, , 12F
為什麼最近常常推文推出笑(笨)點勒....Q_Q~
12/21 13:59, 12F

12/21 14:55, , 13F
推(Y)
12/21 14:55, 13F

12/21 15:31, , 14F
PUSH
12/21 15:31, 14F

12/21 15:53, , 15F
wc模式 是要上廁所就是了 XD
12/21 15:53, 15F

12/21 17:08, , 16F
推~受教了
12/21 17:08, 16F

12/21 20:13, , 17F
「老闆我也要加麵麵,不要辣辣喔~」
12/21 20:13, 17F

12/21 23:15, , 18F
嗚嗚~~你們都欺負我我....Q_Q~ 這是故意的XD
12/21 23:15, 18F

12/21 23:16, , 19F
用廁所模式記憶還不賴ㄟ, 上完沖水(fflush)就一定會清出
12/21 23:16, 19F

12/21 23:17, , 20F
去(沒有人想cache這個吧Orz)
12/21 23:17, 20F

12/22 05:10, , 21F
這個我也有看到 不過常用的就這些而已所以只寫這個
12/22 05:10, 21F

12/22 05:10, , 22F
倒是 c 模式的確頗重要的沒錯
12/22 05:10, 22F
文章代碼(AID): #1BBbnESc (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BBbnESc (C_and_CPP)