簡體   English   中英

在Linux上將文件用作IPC

[英]using files as IPC on linux

我有一個作家,他創建並有時使用一些狀態信息更新文件。 讀者是用lua實現的(所以我只有io.open ),還有可能是bash( catgrep等等)。 我擔心如果在讀者對文件有開放句柄的情況下更新狀態信息(這意味着對文件進行完整的重寫)會發生什么情況? 我還讀到 ,如果寫/讀操作小於4KB,那是原子的:對我來說這是完全可以的,因為狀態信息可以很好地適應這樣的維度。 我可以做這個假設嗎?

讀或寫是原子的,僅對管道小於4 KB,而對磁盤文件而言則不是(原子粒度可能是文件系統塊大小,通常為512字節)。

在實踐中,您可以避免麻煩此類問題(例如,假設您的狀態文件小於512字節),而且我相信,如果編寫者正在打開並快速寫入該文件(尤其是避免使用open(2)),文件並保持打開的文件句柄很長時間-幾秒鍾-然后在以后寫入(2)-一次-在其中放一個小字符串-),您無需費心。

如果您偏執狂,但確實假設讀者(如grep )正在打開文件並快速讀取它,則可以寫入一個臨時文件,並在寫入(和close(2) -ed)時對其進行重命名(2)-對其進行編輯。整體。

正如Duck所建議的 ,將文件鎖定在讀取器和寫入器中也是一種解決方案。

我可能會弄錯,在這種情況下,有人會糾正我,但我認為外部讀者不會對文件是否同時更新感到關注。 他們將打印(或可能出現錯誤或錯誤)任何內容。

無論如何,為什么不避免整個混亂,僅使用文件鎖即可。 讓寫手flock (或類似),而讀者則檢查鎖。 如果他們獲得了鎖,他們就知道可以閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM