gpt4 book ai didi

C++ 锁定文件 Windows 阻塞模式

转载 作者:可可西里 更新时间:2023-11-01 09:25:52 26 4
gpt4 key购买 nike

如何使用 C++ 以阻塞方式在 Windows 上阻塞文件?我所说的阻塞是指......请求锁定,如果文件被锁定,它将等待直到它被解锁,一旦文件被另一个系统进程解锁,然后执行恢复。

P.S.:如果有某种跨平台解决方案,我会更喜欢它。

最佳答案

默认情况下,LockFileEx阻塞直到可以获取锁(尽管您可以使用 LOCKFILE_FAIL_IMMEDIATELY 告诉它不要这样做)。

显然这不是跨平台的。

更新

这个可怕的代码示例说明了它的工作原理(您可能需要将 CreateFile 中的文件名从“lockBlock.cpp”更改为)。运行该程序的一个实例,它将获得锁。运行第二个实例,它会阻塞。第一个实例按 释放锁,第二个实例解除阻塞并获取锁。

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hFile = ::CreateFileA("lockBlock.cpp", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
OVERLAPPED overlapped;
memset(&overlapped, 0, sizeof(overlapped));
const int lockSize = 10000;
printf("Taking lock\n");
if (!LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, lockSize, 0, &overlapped))
{
DWORD err = GetLastError();
printf("Error %i\n", err);
}
else
{
printf("Acquired lock\n");
getchar();
UnlockFileEx(hFile, 0, lockSize, 0, &overlapped);
printf("Released lock\n");
}
return 0;
}

关于C++ 锁定文件 Windows 阻塞模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9186282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com