如何确定使用stat()文件是否是符号链接?

时间:2010-04-14 08:34:26

标签: c symlink inode

我基本上必须为一个类写一个UNIX ls命令的克隆,而且几乎所有东西都在工作。我似乎无法弄清楚如何做的一件事是检查文件是否是符号链接。在stat()的{​​{3}}页面中,我看到定义了mode_t个值,S_IFLNK

这就是我试图检查文件是否是sym-link的方法,但没有运气(注意,stbuf是stat()将inode数据返回的缓冲区):

switch(stbuf.st_mode & S_IFMT){
    case S_IFLNK:
        printf("this is a link\n");
        break;
    case S_IFREG:
        printf("this is not a link\n");
        break;
}

我的代码总是打印this is not a link即使它是,并且我知道所述文件是符号链接,因为实际的ls命令是这样说的,而且我创建了sym-link ... < / p>

有人能发现我可能做错了吗?谢谢你的帮助!

1 个答案:

答案 0 :(得分:24)

你不能。

您需要使用lstat()来统计链接本身,普通stat()将跟随链接,因此永远不会“看到”链接本身。