2011-10-07 79 views
0

我需要知道如何編寫一個系統調用,以便爲讀取和寫入功能阻塞(鎖定)和取消阻止(解鎖)存檔(inode)或分區(super_block)。用於讀寫系統調用的鎖定文件或分區

例如:這些函數都在fs.h lock_super(struct super_block *);
unlock_super(struct super_block *);

如何獲取super_block(例如/ dev/sda1)?

回答

2

lock_super和unlock_super調用並不意味着由用戶級別進程直接控制。只有當用戶進程調用文件系統上的操作(inode操作)時,它才被VFS層調用。如果您仍希望這樣做,您必須編寫自己的設備驅動程序,並將所需功能(鎖定inode的解鎖)提供給用戶級別。

當前沒有任何系統調用會允許您鎖定,解鎖inode。沒有適當的考慮,實施新系統調用不明智的原因有很多。但是如果你想這樣做,你需要在內核中寫入你自己系統調用的處理程序。看起來你想要對文件系統進行細粒度控制,也許你正在實現用戶級文件系統。

有關如何獲取super_block的答案,每個文件系統模塊都將自身註冊到VFS(虛擬文件系統)。 VFS充當用戶和實際文件系統之間的中間層。因此,VFS知道指向lock_super和unlock_super方法的函數指針。 VFS超級塊包含「設備信息」和「指向文件系統超級塊的指針」。你可以從這裏得到這些指針並給它們打電話。但請記住,由於實際的文件系統由VFS管理,因此您可能會破壞數據。

+0

你好。你講過設備驅動程序。我們想知道系統調用。我不知道什麼函數返回vfsmount結構,因爲我們想要進行系統調用而不是設備驅動程序。因爲我們想通過系統調用 – Leonardo

+0

@Leonardo編輯答案來阻止(鎖定)和解除阻止(解鎖)。 – Harman

相關問題