C/linux中的排序glob

C/linux中的排序glob,c,directory,glob,C,Directory,Glob,我需要在目录中查找最新创建/修改的文件。基本上就是ls-t*.bla所做的。在C语言中,不是PHP,所以这个问题对我没有帮助- 这是一个“不”的例子(分叉一个进程并不便宜,它是懒惰的): ?使用opendir()打开目录,将文件名(readdir())读取到一个数组中,然后在该数组上执行qsort()回调,使用stat()读取创建或修改日期,然后使用这些日期告诉qsort()如何排序。不要忘记使用closedir()关闭目录(这可能会在larsmans下面的评论中建议的修改之后更加有效) 最

我需要在目录中查找最新创建/修改的文件。基本上就是ls-t*.bla所做的。在C语言中,不是PHP,所以这个问题对我没有帮助-


这是一个“不”的例子(分叉一个进程并不便宜,它是懒惰的):


使用
opendir()
打开目录,将文件名(
readdir()
)读取到一个数组中,然后在该数组上执行
qsort()
回调,使用
stat()
读取创建或修改日期,然后使用这些日期告诉
qsort()
如何排序。不要忘记使用
closedir()
关闭目录(这可能会在larsmans下面的评论中建议的修改之后更加有效)

最后,在完成排序后,获取第一个/最后一个数组条目(取决于您的排序方式),就完成了

如果可用,您也可以使用
scandir()
一次完成所有这些操作(尽管您不会在必要时进行更多stat()调用,因为这些需要在qsort的比较回调中完成)


PS:有人知道如何原子化地做这件事吗?

由于所有的
stat
调用,这也很昂贵。最好设置一个
struct stat
/filename对数组并对其进行排序。您还可以更高效地知道您只需要最后几个修改过的文件(无需对整个列表进行排序)。不过,我们甚至不知道效率在这里是否重要,所以这是一个罚款。只要告诉我们qsort是在哪里定义的(我们需要什么标题和库?@David Grayson
qsort()
应该在
stdlib.h
中原型化@DavidGrayson请参见
char filename[100];
FILE *f = popen("ls -1t /*.blabla");
fscanf(f, "%s", filename);
pclose(f);