2012-05-01 22 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