【发布时间】:2011-07-26 15:48:58
【问题描述】:
如何将 Windows 中的文件锁定为只有当前线程(同一进程中没有其他线程,也没有其他进程)可以访问(读/写)该文件?
如果可能,请告诉我一些 fcntl-like 解决方案(锁定具有其描述符的文件的解决方案)。但无论如何也欢迎其他解决方案。
【问题讨论】:
标签: c++ file file-locking
如何将 Windows 中的文件锁定为只有当前线程(同一进程中没有其他线程,也没有其他进程)可以访问(读/写)该文件?
如果可能,请告诉我一些 fcntl-like 解决方案(锁定具有其描述符的文件的解决方案)。但无论如何也欢迎其他解决方案。
【问题讨论】:
标签: c++ file file-locking
在 Windows 中,您可以使用 API 函数 CreateFile 并指定 0 作为共享模式以独占访问权限打开文件。更多详情请访问 this MSDN link 和 this MSDN link。
【讨论】:
CreateFile API(没有传递返回的文件HANDLE),那么对CreateFile的调用应该失败,如果我理解的话文档正确。但是,我没有尝试专门这样做(线程间)。
使用WinAPI调用LockFile、Here is a example对其使用。但是,这只会保护您免受其他进程接触您的文件,它仍然允许同一进程中的其他线程使用该文件。
编辑: 我没有看到这是 C++ 抱歉,我只知道线程间 c# 解决方案,但是 MSDN 链接至少可以让您开始防止其他进程接触您的文件。
【讨论】:
LockFile 锁定文件以供单个进程独占使用,而不是由单个线程使用。为确保后者,您必须在流程中构建自己的锁定机制。