需求:
实现文件过期自动删除。
大致思路:
1、获取文件time
2、跟当前时间做比较
3、删除
知识点:
获取文件time方法?
linux可以通过stat方法查看文件的时间,但是会发现有三个时间
ctime=change time 最后一次访问时间 比如:cat touch
atime=access time 最近一次文件内容发生改变时间 比如:vim
mtime=modifiy time 文件状态修改时间,文件属性 比如: chmod chown ln
之后根据需求看想用哪个时间作为删除的时间就可以了。
这样实现看起来好像没什么问题,但是如果在获取到文件时间之后,用户修改了文件(文件时间发生了改变),该不该删除呢?
所以要保证获取文件时间到删除之前原子性操作!
加文件锁?文加锁是建议性锁,并不能影响用户操作和修改文件。X
之后考虑的是在获取文件time之前,先把文件操作权限抹去,这样在获取文件time到删除文件,用户没办法操作文件,看起来可行,试试看。如果文件没有过期或者删除失败的时候,我们还需要把文件权限恢复。
这时可以使用stat函数,将文件各种信息存下来
struct stat statbuf;
int ret = stat(path, &statbuf); //返回0表示成功
想要恢复权限:
int ret = chmod(path,0);
至此,已经可以满足需求。
补充:
在修改权限部分,使用chmod函数虽然会将文件权限恢复,但是会修改文件的ctime,那么有什么方法可以将文件的ctime也修改回去呢?
目前查看了一些资料,得出的结论是使用外部api接口函数,文件的ctime都会随之改变,继续探讨。。。
标签:文件,stat,ctime,删除,定期,时间,time From: https://www.cnblogs.com/itsfei/p/16792241.html