2011-10-07 78 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

相关问题