2012-05-01 50 views
1

我正在研究Linux內核3.3中的FAT文件系統代碼。 對於一個項目,我需要在掛載文件系統的根目錄下在掛載時創建一個文件。我已經想出了在哪裏編寫代碼來創建它,但有幾個關於創建的問題。 (該功能是vfat_mount,在linux/fs/fat/namei_vfat.c中)。文件系統級別的文件創建

mount函數似乎沒有掛載點作爲路徑,但我相信根目錄的dentry存儲在超級塊中。我不確定如何使用此可用數據創建文件。系統調用open()似乎不是一個選項,所以我應該使用文件系統特定vfat_create爲此目的?如果是這樣,有人可以幫助我更多的細節或一些例子。

此外,該文件需要跨越幾個羣集,我不希望文件系統搜索並分配空閒羣集。那麼有沒有辦法直接創建文件,還是應該在創建文件後使用類似fat_add_cluster()的文件?

+0

請考慮是否可以通過添加或修改用戶空間工具或守護程序來完成此操作。 –

+0

我不太明白你的意思。但是如果我在文件系統級別之外做了任何改變,其他文件系統將會受到影響。 – Sankarnm

+0

我的意思是不要試圖通過改變內核來做到這一點。完全在用戶空間中完成 - 即使用程序或守護進程。強烈建議從內核中訪問實際的磁盤文件。 –

回答

0

可以直接調用定義和FS導出filp_open()功能/ open.c.It實際上是在由open()系統調用調用,因此具有相同的arguments.No需要調用文件系統特定的functions.Similarly一旦你」重新完成該文件,關閉filp_close()

+0

但正如我剛纔所說,這些需要創建文件的完整路徑嗎?由於我必須在掛載時執行此操作,因此它必須位於文件系統特定的掛載函數中,即在此情況下爲'vfat_mount()'。在此函數內部,似乎沒有任何對文件系統安裝路徑的訪問權限。掛載點在調用'vfat_mount()'的函數中可用。那麼有什麼可以做的嗎? – Sankarnm

+0

我只用文件名嘗試了'filp_open()',它在pwd中創建了這個文件,恰好在內核的默認文件系統的根目錄下,而不是在我裝入的文件系統中。 – Sankarnm