C/linux中的排序glob
我需要在目录中查找最新创建/修改的文件。基本上就是ls-t*.bla所做的。在C语言中,不是PHP,所以这个问题对我没有帮助-C/linux中的排序glob,c,directory,glob,C,Directory,Glob,我需要在目录中查找最新创建/修改的文件。基本上就是ls-t*.bla所做的。在C语言中,不是PHP,所以这个问题对我没有帮助- 这是一个“不”的例子(分叉一个进程并不便宜,它是懒惰的): ?使用opendir()打开目录,将文件名(readdir())读取到一个数组中,然后在该数组上执行qsort()回调,使用stat()读取创建或修改日期,然后使用这些日期告诉qsort()如何排序。不要忘记使用closedir()关闭目录(这可能会在larsmans下面的评论中建议的修改之后更加有效) 最
这是一个“不”的例子(分叉一个进程并不便宜,它是懒惰的):
?使用
opendir()
打开目录,将文件名(readdir()
)读取到一个数组中,然后在该数组上执行qsort()
回调,使用stat()
读取创建或修改日期,然后使用这些日期告诉qsort()
如何排序。不要忘记使用closedir()
关闭目录(这可能会在larsmans下面的评论中建议的修改之后更加有效)
最后,在完成排序后,获取第一个/最后一个数组条目(取决于您的排序方式),就完成了
如果可用,您也可以使用scandir()
一次完成所有这些操作(尽管您不会在必要时进行更多stat()调用,因为这些需要在qsort的比较回调中完成)
PS:有人知道如何原子化地做这件事吗?由于所有的
stat
调用,这也很昂贵。最好设置一个struct stat
/filename对数组并对其进行排序。您还可以更高效地知道您只需要最后几个修改过的文件(无需对整个列表进行排序)。不过,我们甚至不知道效率在这里是否重要,所以这是一个罚款。只要告诉我们qsort是在哪里定义的(我们需要什么标题和库?@David Graysonqsort()
应该在stdlib.h
中原型化@DavidGrayson请参见
char filename[100];
FILE *f = popen("ls -1t /*.blabla");
fscanf(f, "%s", filename);
pclose(f);