2011-01-12 53 views
2

升壓文件鎖定一般的策略(可共享和範圍的file_locks)和文件一般我覺得鎖定使用,是這樣的:
是tellp安全與文件鎖定

  1. 開放
  2. 對文件內容進行操作
  3. 解鎖
  4. 關閉文件

但是,我將打開追加文件並想要調用tellp來查看我的位置。在上述情況下安全嗎?文件在鎖之前打開並且因此可能不受保護,是否不會立即設置文件指針?如果是這樣,有沒有一個標準的習慣來解決這個問題?

回答

1

這可能是環境特定的,但對大多數的平臺:

當一個文件被打開附加文件指針每次寫入之前立即調整。因此,如果在鎖定文件之前使用tellp,它可能不會告訴您新添加的字節將在哪裏執行,但您不應該有兩個使用鎖定進程仍會附加相同的字節範圍的進程。

+0

如果屬實,這對我來說仍然有些問題。我擔心的一個問題是,我希望每個人都打開要附加的文件,但是如果在文件的開頭打開附加文件並將文件打開,則會寫出一個標頭。 – frankc 2011-01-13 14:33:21

+0

@frankc:然後你需要鎖定文件,然後調用`tellp`來查看你是否需要寫頭。鎖定之前的`tellp`不會有意義。 – 2011-01-13 17:52:36

0

我推薦利好提振文檔: http://www.boost.org/doc/libs/1_45_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.file_lock

中,你可以閱讀:

  • 文件鎖不工作制鎖,即使操作系統支持(如Windows是,類Unix通常沒有),所以如果你鎖定文件,任何人都可以讀/寫/刪除它,除非其他進程使用相同的文件鎖定機制。因此,想想它更像是進程間互斥鎖,而不是真正的文件鎖。
  • 文件鎖是進程間同步,他們不處理
  • 不要忘記沖水(ofstream的同花)內同步多線程,所以你不必擔心緩衝

呵呵,這是非常糟糕的...我想幫忙,我寫了示例代碼,嘗試它並...從1_44開始,文件鎖定對於win32來說是破壞的,對於鎖定的文件,刷新不起作用。

對不起,不是我的錯。

如果有幫助,理論上:如果您打開要附加的文件,這意味着自動尋找在每次寫入操作之前結束。它不會阻止你在任何時候想要結束手動尋找 - 即使沒有寫作。但是,經驗(見上文)說:遠離破碎的東西。