2010-01-13 31 views
9

我在想如果你能夠:只鎖定一行或一個文件在linux中的單個字符,其餘的文件應該保持可訪問的其他進程? 我收到一個有關在linux下使用c/C++模擬文件事務的任務。 請給我一個答案,如果這個答案是肯定的,給我一些鏈接,我可以從中窺視這個任務。使用c/C++鎖定Linux中的文件

感謝, Madicemickael

+0

從位置x到位置y(X 2010-01-13 15:30:52

+1

除非你是OP,請不要附加問句「功課」,因爲這樣做只能是貴公司的意見。如果你認爲這個問題應該被關閉,只是投票將其關閉。 – 2010-01-13 15:33:22

回答

3

lockf(3)可以申請一個鎖到一個文件中的一部分。

12

fcntl()是一個可供選擇的API,因爲它是最少破壞的並且是POSIX。它是唯一一個跨NFS工作的人。這就是說它也是一個完整的災難,因爲鎖定與進程綁定,而不是文件描述符。這意味着如果你鎖定一個文件,然後其他某個線程或某個庫函數鎖定/解鎖它,那麼你的鎖也將被打破。此外,您不能使用文件系統鎖來保護相同進程的兩個線程互相干擾。另外,您不應該對多個用戶可以訪問的文件使用文件鎖,因爲這可以有效地使用戶凍結其他每個進程。

總結:在Unix文件鎖定產生的問題比它解決的。在你使用它之前,你需要確定真的是你確定完全理解了語義。

+1

即使文件鎖必然的過程,你可以使用一個互斥體在線程應用程序,以確保一個線程不會釋放由另一個創建的鎖。 – 2010-01-13 18:24:19