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



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

附言:如果有某种跨平台的解决方案,我更喜欢。

默认情况下,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 lockn");
    if (!LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, lockSize, 0, &overlapped))
    {
        DWORD err = GetLastError();
        printf("Error %in", err);
    }
    else
    {
        printf("Acquired lockn");
        getchar();
        UnlockFileEx(hFile, 0, lockSize, 0, &overlapped);
        printf("Released lockn");
    }
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新