Linux
Linux/ext4/sqlite:可以在寫入文件時觸摸文件以導致競爭條件嗎?
對於上下文:我需要能夠可靠地更新某些 sqlite DB 文件上的時間戳,這些文件會在 ext4 文件系統上獲得間歇性更新。
寫入數據庫時使用
touch
命令(更新最後修改時間)會失敗,甚至更糟,導致數據失去嗎?
您確實可以
touch
在不破壞其內容的情況下打開文件,因為文件系統將序列化更新到 inode 元數據。如果從應用程序的角度來看這是安全的,那完全是另一回事,但它應該是安全的簡單的,因為即使讀取文件也可以更新其元數據(即:當最後一次讀取超過一天或不使用時
noatime
,relatime
或lazytime
)。也就是說,如果 SQLite
mtime
用於某些內部簿記,它可能會被您的元數據更改混淆。如果使用觸摸設置過去的時間戳尤其如此,這通常是一個壞主意。