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 を出力します。
上記の C/Win32 コードを Python でエミュレートする簡単な方法はありますか?