Chinaunix

标题: Linux 软连接与硬连接的疑惑:代码为证 [打印本页]

作者: c_fanatic    时间: 2008-06-23 22:11
标题: Linux 软连接与硬连接的疑惑:代码为证
在看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

请问这是怎么回事?
作者: c_fanatic    时间: 2008-06-23 22:18
标题: 回复 #1 c_fanatic 的帖子
有点明白了,因为stat是处理符号连接功能的,所以它的参数如果是符号链接的话,会直接处理连接的文件的。
但又该怎么得到符号连接的inode呢。正在挖掘中
作者: c_fanatic    时间: 2008-06-23 22:21
标题: 回复 #2 c_fanatic 的帖子
找到了,lstat可以处理。得到的inode是不同的。在linux下用stat也可以查看到文件的inode值。
谢谢大家
作者: cjaizss    时间: 2008-06-23 22:25
自己找到答案了,很好!
作者: buxoman    时间: 2008-06-24 10:38
直接从你这里学习了!谢谢!
作者: lipingtababa    时间: 2008-06-24 11:39
直接用ls -i就可以获取inode,不必自己写代码了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2