获取scandir系统调用以正常使用用户定义的比较函数?

时间:2015-09-02 22:41:26

标签: sorting system-calls scandir

我有一项任务是扫描目录并根据大小,修改时间等几个标准对其进行排序。查看scandir的手册页,显示

 SYNOPSIS
   #include <dirent.h>

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

因此,我编写了一个函数指针,根据文件大小进行排序。如果要扫描的目录是当前目录* 仅* ,它的工作正常。在函数指针中,因为我得到了2个直接指针,它不包含文件/文件夹的size参数,所以我做了一个lstat来获取大小信息。

因此,如果给scandir的目录是当前目录,但是对于除当前目录以外的任何其他目录不起作用,这可以完美地工作,因为对于lstat,它需要文件的完整路径,显然,它没有完整的路径,如果scandir以不同的路径传递,则导致错误说“没有这样的文件或目录”。

lstat((*d1)->d_name, &sb1);
lstat((*d2)->d_name, &sb2);

因此,我想知道如何使用函数指针(第四个参数)并根据文件大小排序?

我可以从dirent指针获取inode编号,但似乎无法仅使用系统调用查找仅使用inode编号的文件详细信息。不允许使用系统库(exec)。

任何提示?

0 个答案:

没有答案