16

我基本上必须为一个类编写一个 UNIX ls 命令的克隆,而且我几乎已经完成了所有工作。我似乎不知道该怎么做的一件事是检查文件是否是符号链接。从 的手册页中stat(),我看到mode_t定义了一个值,S_IFLNK

这就是我试图检查文件是否是符号链接的方式,没有运气(注意,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 命令是这样说的,而且我创建了符号链接......

谁能发现我可能做错了什么?谢谢您的帮助!

4

1 回答 1

27

你不能。

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

于 2010-04-14T08:39:07.297 回答