如何使用C获取目录中最旧的文件?

如何使用C获取目录中最旧的文件?,c,linux,C,Linux,我正在实现日志机制,我希望在达到定义的大小时根据在目录中创建的时间删除最旧的日志文件 但现在我坚持根据时间创建最旧的文件。 如何使用C获取它?在C中没有一种可移植的方法来获取文件的创建时间(或修改时间) 相反,您需要依赖一些不严格可移植的东西——例如,使用POSIX定义的stat()函数从目录项中获取文件名,以获得一个结构,该结构可能有也可能没有struct timespec st_ctim字段 当然,有些文件系统根本没有创建时间;而且,即使有,如果您将文件复制到其他地方(例如,远程存储),创建

我正在实现日志机制,我希望在达到定义的大小时根据在目录中创建的时间删除最旧的日志文件

但现在我坚持根据时间创建最旧的文件。
如何使用C获取它?

在C中没有一种可移植的方法来获取文件的创建时间(或修改时间)

相反,您需要依赖一些不严格可移植的东西——例如,使用POSIX定义的
stat()
函数从目录项中获取文件名,以获得一个结构,该结构可能有也可能没有
struct timespec st_ctim字段

当然,有些文件系统根本没有创建时间;而且,即使有,如果您将文件复制到其他地方(例如,远程存储),创建时间也将不复存在,因此它相对不可靠


相反;最好将创建时间和日期放入文件名中。如果您按照正确的顺序执行此操作(“年、月、日、小时、分钟、秒”-例如,可能像“
mylog\u 2019-10-31\u 14-23-45.txt
”)并保持前导零(例如,月份为
09
,月份为从不
9
)然后对文件名列表进行字母数字排序也会按时间顺序进行排序。

您应该维护一个文件名的内部队列。新创建的一个不断添加到头部。当需要删除时,让我们删除尾盖

您卡在哪个部分上?获取目录中的文件,获取它们的年龄,排序,删除文件?@RaymondHettinger我坚持根据时间获取最旧的文件创建一个
struct
保存文件名和修改时间。创建它们的数组。读取目录,将名称和mod time复制到struct数组中的元素。(关闭目录后)
qsort
按时间成员排序数组,然后
取消
数组[0]的链接。filename
删除最旧的文件。问题似乎根本不包括任何解决问题的尝试。请编辑问题以显示您尝试了什么,并显示您遇到的具体障碍。有关更多信息,请参阅。你运气不好。目录不存储文件创建时间。问题被标记为
linux
,因此可能不需要便携式解决方案。