LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 756|回复: 2

关于软硬链接的2点疑问

[复制链接]
发表于 2005-10-29 16:37:45 | 显示全部楼层 |阅读模式
最近看2.4.18的vfs,慢慢地觉得很多东西还是不清不楚,希望大家帮我确认一下

假设一个ext2文件系统上ls -li的结果如下
ino     i_size          pathname
275927  4034            /home/test.c
275927  4034            /home/test_hl.c
275934  6               /home/test_sl.c -> test.c

考虑系统刚启动的情况,除了root的dentry结构,其它结构都还不存在

1.访问软链接/home/test_sl.c:
经过link_path_walk以及其中的do_follow_link后,最后内存中是否应该存在2个dentry
dentry1.d_name.name = "test_sl.c"
dentry2.d_name.name = "test.c"
且系统中存在2个inode
inode2对应软链接test_sl.c的磁盘索引节点,该索引节点对应的文件数据快,
inode2.i_ino = 275934
inode2.u.ext2_inode_info.i_data = "test.c"
inode1对应test.c的磁盘索引节点,
inode1.i_ino = 275927
inode1.u.ext2_inode_info.i_data中存放文件数据块的地址

dentry1.d_inode = &inode1
dentry2.d_inode = &inode2

2.访问硬链接/home/test_hl.c:
我觉得在物理存储上,test.c和test_hl.c的物理索引节点内容应该完全相同,
在vfs层,是否会建立再建立一个inode3与test_hl.c对应呢?
如果是,那么inode2应该与inode3关联起来吧,但是我看struct inode,里面
只有i_nlink表示硬链接数目,并没有链表把inode2与inode3关联起来啊
linux是如何保证对硬链接修改的一致性的呢?

另外还有一个问题:
如果不允许同一个块设备被多次mount,那dentry和inode之间
就只可能是1对1的关系了吧,不可能存在多对1
如果不牵涉软硬链接,我想自己应该是对的,但因为链接问题都没有搞清楚,
所以也不敢盲目下结论-_-
发表于 2005-10-30 10:09:31 | 显示全部楼层
看apue
dentry主要就包括文件名+索引节点
那两个硬连接文件名不同,索引节点是同一个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-30 16:48:10 | 显示全部楼层
已经明白了,多谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表