我正在尝试创建一个scandir过滤器,以便我可以获取目录列表。这样可以避免常规的fyles和链接。
int directoryFilter(const struct dirent *entry){
struct stat st;
stat(entry->d_name,&st);
if(S_ISDIR(st.st_mode))
return 1;
return 0;
}
它工作,编译和运行良好。但是,如果我执行两次相同的执行,我只会得到.
和..
目录。
有关为什么会发生这种情况的任何线索?
答案 0 :(得分:1)
目录.
和..
是始终存在于每个目录中的特殊条目。由于它们以点开头,因此被大多数工具视为隐藏,但如果您在终端ls -a
中输入,您仍然可以看到它们。
你可能已经知道他们做了什么:
..
是指向上一个目录的链接(/
除外,它指向/
本身),以便打开文件../file_in_parent_directory
。.
是当前目录的链接,因此可以通过./script.sh
调用当前目录中的脚本来完成。如果您不希望这些隐藏目录显示在列表中,您还必须过滤掉以点(.
)开头的每个目录。如果不想要这两个,您必须明确过滤它们。