在 Win32 中,确定资源是否已存在的教科书解决方案是:创建它并检查 GetLastError() 是否返回 ERROR_ALREADY_EXISTS。
例如:
HANDLE h = ::CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, size, name);
bool alreadyExists = (h != INVALID_HANDLE_VALUE) && (GetLastError() == ERROR_ALREADY_EXISTS);
在 python 中, mmap 模块包装了内存映射文件。
但是下面的代码:
INVALID_HANDLE_VALUE = -1
m = mmap.mmap(INVALID_HANDLE_VALUE, length=size, tagname=name)
print ctypes.get_last_error()
即使(命名的)mmap 已经存在,也总是打印 0。
有没有一种简单的方法可以在 python 中模拟上述 C/Win32 代码?