当前位置: 技术问答>linux和unix
如何得知文件是否写完,高手请进,高级问题,高分相赠。
来源: 互联网 发布时间:2015-11-24
本文导语: 在发送文件之前,我需要检查文件是否正在被写入,如果不是则发送,stat等函数不能取出文件是否正在被写入状态,不知是否有其他方法,请高手赐教。 | 给文件加锁是最简单的办法。 如果...
在发送文件之前,我需要检查文件是否正在被写入,如果不是则发送,stat等函数不能取出文件是否正在被写入状态,不知是否有其他方法,请高手赐教。
|
给文件加锁是最简单的办法。
如果要考虑其他不是自己写的进程,可以研究一下lsof的源码,我猜想大致是这样(没有细看,只是简单看了一下源码并且用strace看了一下):
读取/proc下所有进程的打开文件(/proc/xxxx/fd/),得到一个列表并排序,然后进行查询即可。
如果要考虑其他不是自己写的进程,可以研究一下lsof的源码,我猜想大致是这样(没有细看,只是简单看了一下源码并且用strace看了一下):
读取/proc下所有进程的打开文件(/proc/xxxx/fd/),得到一个列表并排序,然后进行查询即可。
|
呵呵
去查看时间,我认为不是个好主意,因为查询的周期短,那么就要占用大量的资源
你可以生成一个文件,比如,原文件叫xxx,你的可以叫xxx.lock,写完的时候就把文件给删除了
这样不会把大量的时间放在一个文件上,你可以同时监视若干文件
对于异常退出的时候,要做点处理,否则就会遗留上一次的辅助文件,就会出现文件一直被锁的情况,你可以把信号接收了,在异常推出的时候,把你处理的xxx.lock给做掉
去查看时间,我认为不是个好主意,因为查询的周期短,那么就要占用大量的资源
你可以生成一个文件,比如,原文件叫xxx,你的可以叫xxx.lock,写完的时候就把文件给删除了
这样不会把大量的时间放在一个文件上,你可以同时监视若干文件
对于异常退出的时候,要做点处理,否则就会遗留上一次的辅助文件,就会出现文件一直被锁的情况,你可以把信号接收了,在异常推出的时候,把你处理的xxx.lock给做掉
|
如果是这样,那就试一下我说的lsof的方法吧,lsof的源码不太好看,比较复杂,不过我想原理应该是我说的那样,你可以用strace跟一下,从系统调用来看可以发现这点:
strace lsof /var/log/messages
strace lsof /var/log/messages
|
要不就system(command);
sprintf(command,"lsof -p %d >>/home/xxx",sunpid);
你再去看你指定的文件?
这个简单,呵呵
sprintf(command,"lsof -p %d >>/home/xxx",sunpid);
你再去看你指定的文件?
这个简单,呵呵
|
可以不停的察看文件的修改时间,一旦有变化,肯定被写过,而且写完了,逻辑上讲,只要轮询的周期够短,一定可以在两次写入之间发现的,呵呵。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。