Linux中文件锁存储在哪里
我正在阅读《理解Linux内核》一书,书中说Linux中文件锁存储在哪里,linux,Linux,我正在阅读《理解Linux内核》一书,书中说文件锁的列表存储在文件的inode(字段I\u flock)中 但是在Linux2.6.11.12的sys\u flock()中,它最终将调用flock\u lock\u file()。它使用filp->f_dentry->d_inode->i_flock获取文件锁的列表,filp->f_dentry是“包含”文件的目录的dentry int flock_lock_file(struct file *filp, struct file_lock *ne
文件锁的列表存储在文件的inode(字段I\u flock
)中
但是在Linux2.6.11.12
的sys\u flock()
中,它最终将调用flock\u lock\u file()
。它使用filp->f_dentry->d_inode->i_flock
获取文件锁的列表,filp->f_dentry
是“包含”文件的目录的dentry
int flock_lock_file(struct file *filp, struct file_lock *new_fl) {
// ...
struct inode * inode = filp->f_dentry->d_inode;
// ...
}
假设文件锁定
列表与filp->f\u dentry->d\u inode->i\u flock
链接,当存在硬链接时会发生什么情况:
/some_path/foo/file.txt
/another_path/bar/file_link
文件链接是指向file.txt的硬链接
当我们使用这两个路径打开同一个文件时,sys\u open()
会将filp->f\u dentry
分别设置为foo
和bar
,不是吗?如果我的猜测是正确的,那么文件锁定
如何工作?文件锁定
确实存储在相应文件的索引节点
中
一个inode
可以由几个目录项引用,这些目录项链接在inode的i\u dentry
字段中。即使是一个唯一的文件可能有不同的filp->f_dentry
,filp->f_dentry->d_inode
都指向同一个inode。文件锁
确实存储在相应文件的inode
中
一个inode
可以由几个目录项引用,这些目录项链接在inode的i\u dentry
字段中。即使是一个唯一的文件可能有不同的filp->f_dentry
,filp->f_dentry->d_inode
都引用相同的inode