2010-04-21 133 views
0

這不是一個直接編碼問題,而是更多的操作系統處理機制。我正在讀一些關於C#和文件處理的問題。顯然,C#在試圖訪問文件時拋出了一個關於文件被鎖定的異常。所以我的問題是,C#使用內部鎖來處理進程之間的文件I/O,還是OS使用某種類型的文件I/O互斥?文件I/O操作系統處理

從我對操作系統的瞭解,以及至少unix,是操作系統沒有實現任何類型的互斥排除試圖訪問同一個文件的進程。

回答

1

當你打開一個文件,你可以通知操作系統要如何共享訪問文件。你可以說「讓別人而我把它打開,讀取該文件,但不寫它」或「允許他人讀取和寫入文件,而我把它開了」,甚至「沒有允許任何人以不辦當我打開它時,這個文件的任何內容「。

通常情況下,當你打開一個文件進行讀取,您指定的「不允許任何人寫(或刪除)文件」,因爲這會導致你在讀取數據的損壞。

Linux確實實現了文件鎖定,但並不是強制性的,據我所知(即程序可以忽略鎖定並打開文件)。在Windows上,鎖由內核管理,不能被應用程序繞過。

0

不同的系統有不同的方法。 Unix擁有創建諮詢鎖的羣體系統調用,但程序可能會忽略它的危險。查看flock(2)手冊頁。

此外,維基百科頁面file locking有一個相當不錯的概述;它真的可以被視爲一個完整的回答了這個問題: