Qt中QLockFile实现以独占的方式读写文件

前提

当不同进程或线程读写同一个文件时,会导致冲突,那么这个时候就需要以独占的方式来读写文件(更好的方法是共享读,互斥写,此处不做讨论)。

问题

查询Qt的帮助文档,发现QLockFile类,该类提供使用文件的进程之间的锁定,比较接近我的要求。

但是用过以后发现QLockFile根本没有继承QIODevice,也没有提供任何文件读写接口。只是在lock()/tryLock()的时候自动生成一个文件,无法对此文件进行读写操作,这就导致了不仅别的进程无法使用此文件,本进程也无法使用此文件(尴尬)!

解决方法

假设我们要以独占的方式来读写“A”文件,那么我们可以通过QLockFile来锁定临时文件“tempA”,读写完“A”文件后,解锁;其它进程在读写“A”文件前,用QLockFile锁“tempA”文件,若锁定成功,则说明此时“A”文件无占用,可以进行读写 ,若锁定失败,在说明有进程在对“A”文件使用,循环等待并再次尝试锁定。

可以把“tempA”文件理解为一个防火墙一样的存在。

示例:

//读写A文件前锁tempA文件
QLockFile lockfile(“tempA”);
while(1){
    //若锁定成功,则退出循环,执行下一步;
    //若未锁定成功,则说明tempA被其它地方锁住,即代表A文件正在被使用
    if(lockfile.tryLock(0)){
        break;
    }
}

//此处对A文件的读写操作
//。。。。。。
//open file and read/write

//读写A文件完成后解锁tempA文件
while(1){
    lockfile.unlock();
    if(!lockfile.isLocked()){
        break;
    }
}

以上方法起到文件锁的作用,虽然实际的“A”文件本身未锁定,但达到了锁的效果!

结尾

只为记录,只为分享! 愿所写能对你有所帮助。不忘记点个赞,谢谢~

 

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值