2010-06-14 58 views
2

我在Linux內核2.4(作業)中實現了一個類似於FTP的協議,並且我的印象是,如果一個文件已經打開,線程應該失敗,直到我實際嘗試它並發現它通過。防止線程寫入同一個文件

如何防止這種情況發生? PS:我使用open()打開文件。

PS2:我需要能夠訪問現有的文件。我只是想阻止他們同時寫入。

+0

等等。你正在Linux內核中執行此操作?如果你的意思是用戶模式進程(即不在內核中),你是使用不同的線程(在同一進程中)還是不同的進程(即你使用fork())? – 2010-06-15 02:40:37

+0

我正在用戶模式下執行此操作。我猜內核信息確實不重要,但我想確保在內核之間打開文件的方式沒有細微的錯誤/差異。 – EpsilonVector 2010-06-15 16:44:45

+0

線程(pthreads或kin)與進程(即fork)有什麼關係。我知道你已經接受了一個答案......我認爲它仍然會幫助未來的讀者。 – 2010-06-15 21:58:15

回答

2

您可以保留打開文件的列表,然後在打開文件之前檢查它是否已被其他線程打開。這種方法的一些問題是:

  • 您將需要使用同步原語(如Mutex)以確保列表是線程安全的。

  • 一旦程序結束,文件將需要從列表中刪除。

1

系統級文件鎖定是基於進程的,所以你不能使用它。您將需要使用進程級鎖定。例如,通過使用pthread定義一個互斥鎖(鎖)。

1

使用O_CREATE和O_EXCL標誌打開()。這樣,如果文件已經存在,調用將失敗。

+0

這對我不起作用,因爲我需要能夠訪問現有文件。我只是想阻止他們同時寫入。 – EpsilonVector 2010-06-14 20:35:05

相關問題