【发布时间】: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手册页,因为scandir将compar直接传递给qsort。即compar函数决定了显示结果的顺序。 -
如果
NULL被传递,我不会依赖它工作,因为它取决于正在使用的 libc 实现。 -
@zwol:我检查的前两个实现,glibc 和 openbsd,测试了
compar的值,如果它是 NULL,它们只是跳过排序。 POSIX 肯定不需要这种行为,但它似乎是一个有用的扩展,也许 OP 的系统也提供了一个。