我需要等个文件被一个进程建立,写入,关闭,然后才能读取。 不借助编程语言如何做到呢?
在有文件占用情况下[root@root1 root]$ /usr/sbin/lsof test.txtCOMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEbash 5827 root 1u REG 9,3 3232066 32122 test.txt[root@root1 root]$ echo $?
用这个命令也可以fuser -ufuser -k
c中好像没有现成的函数实现这个功能,你可以加上进制同步机制或者用fcntl实现文件读写锁来解决你的问题。参考资料:Unix环境文件读写锁
我记得 fuser -u filename 好像就查看正在操作当前文件的进程号和用户信息
ps -ef | grep filename
要进一步做判断,可以再次grep read write vi 等关键字
在打开的时候 判断返回值 或者使用getlasterror 也可以判断
其实我觉得你可以在文件写入时在数据库或缓存或文件中加个标识,等写入结束再删去。
用lsof来判断这个文件是否被"占用",比如:
/usr/sbin/lsof filename.log
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(7)
在有文件占用情况下
[root@root1 root]$ /usr/sbin/lsof test.txt
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 5827 root 1u REG 9,3 3232066 32122 test.txt
[root@root1 root]$ echo $?
用这个命令也可以
fuser -u
fuser -k
c中好像没有现成的函数实现这个功能,你可以加上进制同步机制或者用fcntl实现文件读写锁来解决你的问题。
参考资料:Unix环境文件读写锁
我记得 fuser -u filename 好像就查看正在操作当前文件的进程号和用户信息
ps -ef | grep filename
要进一步做判断,可以再次grep read write vi 等关键字
在打开的时候 判断返回值 或者使用getlasterror 也可以判断
其实我觉得你可以在文件写入时在数据库或缓存或文件中加个标识,等写入结束再删去。
用lsof来判断这个文件是否被"占用",比如:
/usr/sbin/lsof filename.log