免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2658 | 回复: 5
打印 上一主题 下一主题

Linux 软连接与硬连接的疑惑:代码为证 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-23 22:11 |只看该作者 |倒序浏览
在看APUE第四章的时候,讲了关于硬连接和软连接的情况。说在unix上硬连接和源文件共用一个inode;而软连接则不是。
我在linux上进行了如下代码检验,发现linux并不是和unix一样,它们都共用一个inode。
请大家帮我看看是不是我的程序或理解有错误:

linux上执行了如下命令:
#ln a b
#ln -s a c
结果如下:
#ls -lt
lrwxrwxrwx 1 root root c -> a
-rw-r--r--     2 root root a
-rw-r--r--     2 root root b

代码如下(省去错误检查)
void programStat(){
    struct stat buf1, buf2, buf3 ;

    stat("/workspace/test/a", &buf1);
    printf("inode1=%ld\n",buf1.st_ino);

    stat("/workspace/test/b", &buf2);
    printf("inode2=%ld\n",buf2.st_ino);

    stat("/workspace/test/c", &buf3);
    printf("inode3=%ld\n",buf3.st_ino);

}

得到的结果完全一样,我系统上显示为721678

请问这是怎么回事?

论坛徽章:
0
2 [报告]
发表于 2008-06-23 22:18 |只看该作者

回复 #1 c_fanatic 的帖子

有点明白了,因为stat是处理符号连接功能的,所以它的参数如果是符号链接的话,会直接处理连接的文件的。
但又该怎么得到符号连接的inode呢。正在挖掘中

论坛徽章:
0
3 [报告]
发表于 2008-06-23 22:21 |只看该作者

回复 #2 c_fanatic 的帖子

找到了,lstat可以处理。得到的inode是不同的。在linux下用stat也可以查看到文件的inode值。
谢谢大家

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2008-06-23 22:25 |只看该作者
自己找到答案了,很好!

论坛徽章:
0
5 [报告]
发表于 2008-06-24 10:38 |只看该作者
直接从你这里学习了!谢谢!

论坛徽章:
0
6 [报告]
发表于 2008-06-24 11:39 |只看该作者
直接用ls -i就可以获取inode,不必自己写代码了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP