Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为读写系统调用锁定文件或分区_Linux_Locking_Linux Kernel_Kernel_System Calls - Fatal编程技术网

Linux 为读写系统调用锁定文件或分区

Linux 为读写系统调用锁定文件或分区,linux,locking,linux-kernel,kernel,system-calls,Linux,Locking,Linux Kernel,Kernel,System Calls,我需要知道如何编写一个系统调用来阻止(锁定)和取消阻止(解锁)用于读写函数的归档文件(inode)或分区(super_block) 示例:这些函数在fs.h中 lock_super(struct super_block*) unlock_super(struct super_block*) 如何获得超级块(例如/dev/sda1)?锁定超级和解锁超级调用并不意味着由用户级进程直接控制。只有当用户进程调用文件系统上的操作(inode上的操作)时,VFS层才会调用它。如果您仍然希望这样做,您必须编写

我需要知道如何编写一个系统调用来阻止(锁定)和取消阻止(解锁)用于读写函数的归档文件(inode)或分区(super_block)

示例:这些函数在fs.h中 lock_super(struct super_block*)
unlock_super(struct super_block*)


如何获得超级块(例如/dev/sda1)?

锁定超级和解锁超级调用并不意味着由用户级进程直接控制。只有当用户进程调用文件系统上的操作(inode上的操作)时,VFS层才会调用它。如果您仍然希望这样做,您必须编写自己的设备驱动程序,并将所需的功能(inode的锁定解锁)公开给用户级别

当前没有允许您锁定、解锁索引节点的系统调用。有很多原因导致在没有适当考虑的情况下实现新的系统调用是不明智的。但是如果您希望这样做,您需要在内核中编写自己的系统调用处理程序。似乎您希望对文件系统进行细粒度控制,也许您正在实现用户级文件系统


对于如何获得super_块的答案,每个文件系统模块都向VFS(虚拟文件系统)注册自己。VFS充当用户和实际文件系统之间的中间层。因此,VFS知道lock_super和unlock_super方法的函数指针。VFS超级块包含“设备信息”和“指向文件系统超级块的指针集”。你可以从这里得到这些指针,然后打电话给他们。但是请记住,因为实际的文件系统是由VFS管理的,所以您可能会破坏数据。

您好。您提到了设备驱动程序。我们想了解有关系统调用的信息。我不知道什么函数返回vfsmount结构,因为我们想进行系统调用,而不是设备驱动程序。因为我们想通过系统调用阻止(锁定)和取消阻止(解锁)