使用scandir时,区分符号链接文件与符号链接目录

时间:2014-05-06 01:13:47

标签: symlink scandir

我一直在使用scandir,并使用d_type区分目录和文件:

int isdir(const struct dirent *entry)
{
return entry->d_name[0]!='.' && entry->d_type&4;
}

int isfile(const struct dirent *entry)
{
return entry->d_name[0]!='.' && entry->d_type&8;
}

很明显0100b是一个目录,而1000b是一个文件,经过一些调查后,我很明显0010b代表了一个符号链接。所以你想(或者至少,我做过)0110b代表一个符号链接目录,而1010b将是文件的符号链接,但那不是什么我经历过。

相反,所有符号链接都显示d_type 1010b为{{1}}常规文件或目录。如何区分符号链接文件与符号链接目录?

1 个答案:

答案 0 :(得分:1)

没有“符号链接文件”或“符号链接目录”。符号链接是它自己的类型:无论它指向什么,它都是相同类型的对象。此外,它甚至不需要指向任何东西:符号链接可以被破坏。查看stat系统调用,并与lstat进行比较。 stat读取符号链接; lstat获取符号链接inode本身的属性。