当前位置:  技术问答>linux和unix

如何得知文件是否写完,高手请进,高级问题,高分相赠。

    来源: 互联网  发布时间:2015-11-24

    本文导语:  在发送文件之前,我需要检查文件是否正在被写入,如果不是则发送,stat等函数不能取出文件是否正在被写入状态,不知是否有其他方法,请高手赐教。 | 给文件加锁是最简单的办法。 如果...

在发送文件之前,我需要检查文件是否正在被写入,如果不是则发送,stat等函数不能取出文件是否正在被写入状态,不知是否有其他方法,请高手赐教。

|
给文件加锁是最简单的办法。
如果要考虑其他不是自己写的进程,可以研究一下lsof的源码,我猜想大致是这样(没有细看,只是简单看了一下源码并且用strace看了一下):

读取/proc下所有进程的打开文件(/proc/xxxx/fd/),得到一个列表并排序,然后进行查询即可。

|
呵呵
去查看时间,我认为不是个好主意,因为查询的周期短,那么就要占用大量的资源
你可以生成一个文件,比如,原文件叫xxx,你的可以叫xxx.lock,写完的时候就把文件给删除了
这样不会把大量的时间放在一个文件上,你可以同时监视若干文件

对于异常退出的时候,要做点处理,否则就会遗留上一次的辅助文件,就会出现文件一直被锁的情况,你可以把信号接收了,在异常推出的时候,把你处理的xxx.lock给做掉

|
如果是这样,那就试一下我说的lsof的方法吧,lsof的源码不太好看,比较复杂,不过我想原理应该是我说的那样,你可以用strace跟一下,从系统调用来看可以发现这点:
strace lsof /var/log/messages

|
要不就system(command);
sprintf(command,"lsof -p %d >>/home/xxx",sunpid);
你再去看你指定的文件?

这个简单,呵呵

|
可以不停的察看文件的修改时间,一旦有变化,肯定被写过,而且写完了,逻辑上讲,只要轮询的周期够短,一定可以在两次写入之间发现的,呵呵。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问Unix下是否有函数得知“指定文件是否被打开”?
  • 急,急,急:如何得知JEditorPane内是否选取文字?
  • 请问如何得知linux中是否安装有xfree86?
  • 如何得知某用户,当前是否已近登录系统?
  • 紧急! 如何得知一特定表是否存在的信息?(ORACLE).....
  • 请问如何用C得知某个目录所占用的磁盘空间?
  • 我装的linux,但是怎样得知自己系统的版本啊?
  • 機架式pc擁有12個網路chip如何得知封包由哪個interface出去的?
  • 在make install之前,运行configure 的时候,如何得知全部支持的参数
  • 两个没有亲缘的进程A和B,如何在进程B中得知进程A的PID号呢?
  • 如何得知一个客户端的IP是静态的还是动态的?
  • 应用程序如果得知USB设备的插拔
  • 如何得知,当前所有每个用户的磁盘使用情况
  • 如何让自己的程序得知linux系统即将重启还是关机?
  • 怎样从applet中得知浏览器是IE还是Netscape
  • 请问如何得知某个usb设备已经插上并且可用?
  • 用linux做局域网服务器,结果上网很慢,怎样得知服务器网络方面的运行状态 --急急急在线等--
  • 做网页有时会用到"HTTP_USER_AGENT"或"REMOTE_ADDR"这样的参数,这到底是一个什么参数,如何得知这一类参数的全部信息?谢谢
  • 各位,线程的run方法不允许抛出异常,那我的调用程序如何得知线程里发生了异常?
  • 如何得知对方已关闭连接?
  • 急问:如何得知linux下设备的使用情况
  • 如何得知子孙进程中有孤立进程产生
  • 在网页如何得知来访者的IP,操作系统,IE版本号?
  • java某方法在写代码时,如何得知运行时将要调用它的方法的名称及其所在类名?(很难的,请赐教,送您100)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3