我有一種情況,我需要同時讀取/寫入文件,但操作范圍有限:僅追加,沒有隨機偏移寫入從隨機位置讀取,我確定之前已經寫入了內容(通過附加,通過 golang 通道進行內部訪問序列化,以確保隨機讀取僅在附加內容后發生)只有一個進程在運行這是一個高負載的應用程序,我想避免每次讀/寫鎖定文件我要打開 2 個文件 - 一個用于讀取,另一個僅用于附加這樣做會產生一些潛在的問題/錯誤嗎?如果我想避免每次讀/寫都鎖定文件,推薦的做法是什么?ps golang, linux, ext4
1 回答

長風秋雁
TA貢獻1757條經驗 獲得超7個贊
我假設“隨機讀取”實際上是指“任意讀取”。
如果我正確理解您的用例,您無需手動查找或鎖定或執行任何操作。UNIX 通過O_APPEND
. 這是您可以執行的操作:
用 . 打開文件
os.O_APPEND
。這樣每次寫入,無論之前的任何操作,都將轉到文件末尾閱讀時使用
File.ReadAt
. 這使您可以為讀取指定任意偏移量
使用此方案,您可以避免任何形式的鎖定:操作系統會為您完成。由于緩沖區緩存,這種方案甚至不是低效的:追加和讀取幾乎是獨立的。
- 1 回答
- 0 關注
- 212 瀏覽
添加回答
舉報
0/150
提交
取消