Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 - Fatal编程技术网

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

我正在阅读《理解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 *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