返回顶部

一种实现文件定期删除方法

需求:

实现文件过期自动删除。

大致思路:

1、获取文件time

2、跟当前时间做比较

3、删除

知识点:

获取文件time方法?

linux可以通过stat方法查看文件的时间,但是会发现有三个时间

ctime=change time 最后一次访问时间 比如:cat touch

atime=access time 最近一次文件内容发生改变时间 比如:vim

mtime=modifiy time 文件状态修改时间,文件属性 比如: chmod chown ln

image

之后根据需求看想用哪个时间作为删除的时间就可以了。

这样实现看起来好像没什么问题,但是如果在获取到文件时间之后,用户修改了文件(文件时间发生了改变),该不该删除呢?

所以要保证获取文件时间到删除之前原子性操作!

加文件锁?文加锁是建议性锁,并不能影响用户操作和修改文件。X

之后考虑的是在获取文件time之前,先把文件操作权限抹去,这样在获取文件time到删除文件,用户没办法操作文件,看起来可行,试试看。如果文件没有过期或者删除失败的时候,我们还需要把文件权限恢复。

这时可以使用stat函数,将文件各种信息存下来

struct stat statbuf;
int ret = stat(path, &statbuf); //返回0表示成功

想要恢复权限:

int ret = chmod(path,0);

至此,已经可以满足需求。

补充:

在修改权限部分,使用chmod函数虽然会将文件权限恢复,但是会修改文件的ctime,那么有什么方法可以将文件的ctime也修改回去呢?

目前查看了一些资料,得出的结论是使用外部api接口函数,文件的ctime都会随之改变,继续探讨。。。

posted @ 2022-10-14 17:03  十方央丶  阅读(525)  评论(0)    收藏  举报