如何使用scandir

时间:2018-02-21 22:39:07

标签: c scandir

我想使用C API按创建顺序读取目录中的文件,但我知道readdir()没有指定读取顺序。所以我可以使用scandir()来执行此操作,方法是在stat()的2个d_name字段上传递一个struct dirent的比较函数并返回-101确定首先创建的条目。

但我有两个问题:

  1. struct dirent有一个d_ino字段。我是否可以比调用d_ino更有效地使用stat()字段获取创建时间?

  2. 比较函数的函数签名是int compare(const struct dirent **, const struct dirent **);似乎通过const指针而不是const双指针传递结构就足够了。有谁知道为什么结构由双指针传递而不是仅通过指针传递?

1 个答案:

答案 0 :(得分:1)

没有可移植的方法直接从inode检索创建时间。

为了最大限度地减少stat()系统调用的数量,请按以下步骤操作:

  • 使用创建时间和指向文件名的指针分配结构数组。
  • 通过为每个条目迭代地调用stat()来初始化此数组,从条目和当前目录的相对路径组成完整文件名,并将创建时间和指针存储到条目名称。
  • 使用ad-hoc排序功能对此数组进行排序。
  • 列出此表中的条目。