【问题标题】:How does the 4th argument of scandir() work?scandir() 的第四个参数是如何工作的?
【发布时间】:2020-06-16 00:42:02
【问题描述】:

scandir() 的定义如下:

int scandir(const char *dirp, struct dirent ***namelist,
   int (*filter)(const struct dirent *),
   int (*compar)(const struct dirent **, const struct dirent **));

compar 是什么?我在那里传递的回调有什么区别?手册页似乎什么也没说。在那里传递 NULL 是否安全?有人可以向我解释第四个参数的目的和用法吗?我已经进行了研究,但没有找到任何有用的信息,所以,我来了。

【问题讨论】:

  • 你有哪个手册页?我说“……使用 qsort(3) 和比较函数 compar()……排序”。您可能可以在网上找到它。
  • 它在您的链接中说了同样的话。 Ctrl+F 比较
  • 您还需要阅读qsort 手册页,因为scandircompar 直接传递给qsort。即compar函数决定了显示结果的顺序。
  • 如果 NULL 被传递,我不会依赖它工作,因为它取决于正在使用的 libc 实现。
  • @zwol:我检查的前两个实现,glibc 和 openbsd,测试了compar 的值,如果它是 NULL,它们只是跳过排序。 POSIX 肯定不需要这种行为,但它似乎是一个有用的扩展,也许 OP 的系统也提供了一个。

标签: c function scandir


【解决方案1】:

它确定列出项目的顺序,与qsort 类似。传递 NULL 是未定义的行为。感谢 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2021-07-09
    相关资源
    最近更新 更多