我正在为大学编写一个 TFTP 服务器程序,它需要独占访问它打开以供阅读的文件。因此,可以配置为如果一个文件被另一个进程锁定,它会等待文件解锁。
在 Win32 上有什么方法可以等待文件解锁而不先为它创建句柄吗?
我问的原因是,如果另一个进程调用 CreateFile()使用与我的进程使用的不兼容的 dwShareMode,我什至无法使用 LockFileEx() 获得用于等待锁定的文件句柄.
提前感谢您的帮助!
最佳答案
如果您查看 Stack Overflow 问题 What Win32 API can be used to find the process that has a given file open?和 SYSTEM_HANDLE_INFORMATION structure ,您会找到指向可用于枚举进程和每个正在运行的进程的所有打开句柄的代码的链接。此信息可用于获取打开文件的进程的 HANDLE
以及该文件的 HANDLE
。然后您将使用 DuplicateHandle()
创建文件 HANDLE
的副本,但在 TFTP 进程的句柄表中。复制的 HANDLE
可以被 TFTP 进程使用 LockFileEx()
.
此解决方案依赖于一个内部函数 NtQuerySystemInformation()
,以及一个未记录的系统信息类值,可用于枚举打开的句柄。请注意,NtQuerySystemInformation()
的此功能“可能会在未来的 Windows 版本中更改或不可用”。您可能想使用 SEH防止发生访问冲突的处理程序。
关于c - 等待文件解锁 - Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7621248/