簡體   English   中英

C - 管理同一文件的共享庫

[英]C - Shared library with management of the same file

我想在 C 中為 linux 創建共享庫,數據庫管理的一些抽象實現。 共享庫負責讀取包含數據庫的文件並將差異寫入其中。 但我不知道如何處理這種情況下的文件處理的多處理問題,例如:App1 嘗試將差異寫入數據庫文件,而 App2 目前已打開帶有數據庫的文件以讀取它。 在此示例中,我想通知 app1 文件當前已打開並延遲寫入序列,直到 App2 完成數據庫文件讀取。

我正在考慮使用一些互斥機制或使用全局枚舉變量來管理當前文件狀態,但是在閱讀了一些帖子后,我了解到每個使用共享庫的應用程序都會在 memory 中創建自己的副本,並且它們不共享任何memory 段工作期間。

共享庫負責讀取包含數據庫的文件並將差異寫入其中。

這是可能的,但退出復雜的解決方案。

雖然您需要確保多個進程不會相互干擾。 可以使用文件日志(請參閱manflock )執行此操作,並在man fcntl中記錄鎖定,但您必須確保多個進程“就地”更新不相交的文件塊(無需調整文件大小)。

這也容易出現死鎖——如果其中一個進程鎖定一個區域,然后進入無限循環,其他進程也可能會卡住。

一個更簡單的解決方案涉及客戶端-服務器,其中服務器實現所有寫入,客戶端向其發送讀取和修改請求。

PS 現有的庫實現了這兩種方法。 使用現有解決方案,您可能會節省幾個月的開發時間。

暫無
暫無

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

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