scandir过滤器类型S_ISDIR

时间:2016-01-15 17:59:26

标签: c linux filter directory scandir

我正在尝试创建一个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;
}

它工作,编译和运行良好。但是,如果我执行两次相同的执行,我只会得到...目录。

有关为什么会发生这种情况的任何线索?

1 个答案:

答案 0 :(得分:1)

目录...是始终存在于每个目录中的特殊条目。由于它们以点开头,因此被大多数工具视为隐藏,但如果您在终端ls -a中输入,您仍然可以看到它们。

你可能已经知道他们做了什么:

  • ..是指向上一个目录的链接(/除外,它指向/本身),以便打开文件../file_in_parent_directory
  • .是当前目录的链接,因此可以通过./script.sh调用当前目录中的脚本来完成。

如果您不希望这些隐藏目录显示在列表中,您还必须过滤掉以点(.)开头的每个目录。如果不想要这两个,您必须明确过滤它们。