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

我基本上必须为一个类编写一个UNIX ls命令的克隆,而且几乎所有东西都在工作。 我似乎无法弄清楚如何做的一件事是检查文件是否是符号链接。 从stat()的手册页中,我看到定义了一个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; } 

我的代码ALWAYS打印this is not a link即使它是,并且我知道一个事实,所述文件是一个符号链接,因为实际的ls命令这样说,再加上我创建了sym-link …

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

你不能。

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