linux下如何判断文件被占用

沈万三gz 2016-01-20 05:16:26
现在有一个需求:
将指定目录下的文件拷贝到另一个位置。
问题:
在拷贝之前必须检查目录下的文件已经被关闭,但是不知道怎样检查。
思路:
1.lsof/fuser--测试了下,好像只能检查目录被占用,不能检查文件.
root@bluedon:/home/sjw/0120# cat /proc/version 
Linux version 3.10.0 (root@bluedon) (gcc version 4.9.2 (Debian 4.9.2-10) ) #1 SMP Mon Nov 16 16:49:37 CST 2015

root@bluedon:/home/sjw/0120# lsof -h
lsof 4.86
latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man


2.使用fopen以独占方式打开该文件--如果目录下文件很多,这样的方式比较效率低

3.stat文件状态,但是没有查到对应的标志--标识文件是否被占用

求各位大神指点,在线急等!!!
...全文
2282 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-04-02
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
独占打开失败即被占用。我觉得。
如果已经被其他进程采用非独占的方式打开了,这个就没有用了。
auerjds 2017-04-14
  • 打赏
  • 举报
回复
java中没有独占打开linux中的文件的方法,有人知道怎么才能在java代码中独占打开文件吗?
brk1985 2016-08-19
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
独占打开失败即被占用。我觉得。
赵老师,linux上怎么独占打开文件?目前没有找到合适方式。
沈万三gz 2016-01-25
  • 打赏
  • 举报
回复
最后还是用lsof判断文件夹,然后使用脚本过滤筛选出未被占用的文件。。。。。。没时间看lsof的源代码,应该有底层接口判断方法
「已注销」 2016-01-21
  • 打赏
  • 举报
回复
拷贝之前用flock()锁住,拷贝玩用flock()解锁。
沈万三gz 2016-01-21
  • 打赏
  • 举报
回复
额,我整理了下这方面的资料,linux下是没有直接的api或者对应的标识符来判断文件是否被占用,因为难以保证其他的进程对文件的操作,linux下没有对文件做这方面的功能;所以必须在业务层自己判断: 1.独占方式打开失败 2.文件锁--建议锁锁文件失败 3.文件内容hash,2s钟后比对失败 目前只想到了上述3中方法判断。。。。
忘世麒麟 2016-01-21
  • 打赏
  • 举报
回复
返回打开文件的状态。
赵4老师 2016-01-21
  • 打赏
  • 举报
回复
独占打开失败即被占用。我觉得。
沈万三gz 2016-01-20
  • 打赏
  • 举报
回复
刚刚又想到一个思路,linux所有非正常关闭的文件都会有一个以swp结尾的备份文件,可以判断该文件是否存在来判断文件的状态,但是这个方法比较取巧,还是想知道有没有对应的api或者对应的状态标识符来获得文件是否被占用?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧