微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LockFileEx返回成功,但似乎没有效果

我试图locking一个文件,因为它坐在一个networking驱动器上,多个计算机上的多个程序实例需要编辑它。 为了防止损坏,我打算设置它,以便一次只有一个实例拥有权限。

我实现了一个锁,理论上它将locking文件的前100个字节。 我使用Qt自己的文件处理,但它有一个返回一个通用文件句柄的方法

QFile file(path); HANDLE handle = (HANDLE)_get_osfhandle(file.handle()); OVERLAPPED ov1; memset(&ov1,sizeof(ov1)); ov1.Offset = 0; ov1.OffsetHigh = 0; if (handle == INVALID_HANDLE_VALUE) { // error return; } LockFileEx(handle,LOCKFILE_FAIL_IMMEDIATELY | LOCKFILE_EXCLUSIVE_LOCK,100,&ov1); qDebug() << file.readLine();

LockFileEx()返回1 ,所以它似乎已经成功。 但是,如果我在多个实例中运行程序,它们都可以读取并打印文件的第一行。 除此之外,我可以用任何文本编辑器自由编辑文件。 作为一个networking文件不是一个问题,因为它与本地文件的行为相似。

C ++的Windows线程和互斥问题

boost :: interprocess :: named_mutex与CreateMutex

是否有可能在Windows中进行静态初始化互斥锁?

Pthread互斥锁由不同的线程解锁

模仿后CreateMutex失败

自定义RAII C ++实现范围互斥锁

在C / C ++的窗口中的内存映射文件中放置一个互斥锁

什么是pthread_mutex **的“认互斥体属性

问题是,当程序没有终止时, QFile变量是本地的,所以在完成函数之后, QFile的析构函数调用,所以它释放了文件。 操作系统似乎已经释放了锁。

如果我的QFile幸存的范围,一切正常。 一个小问题是,虽然我期望文件被锁定而不能读取,但是外部程序确实只能读取文件。 这不是问题,因为我的程序可以检查是否可以创建一个锁,并检测失败。 这意味着预期的互斥功能起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐