如何使用python查明(windows)memorymappedfile是否已存在

2024-09-27 04:29:11 发布

您现在位置:Python中文网/ 问答频道 /正文

在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模块包装内存映射文件。在

但以下代码:

^{pr2}$

始终打印0,即使(命名的)mmap已经存在。在

有没有一种简单的方法可以在python中模拟上述C/Win32代码?在


Tags: 代码valueexistspageerror资源解决方案handle
1条回答
网友
1楼 · 发布于 2024-09-27 04:29:11

您可以使用ctypes 例如:

import ctypes
def check_file_is_mapped_file(file_name,file_size):
    _CreateFileMapping = ctypes.windll.kernel32.CreateFileMappingW
    _GetLastError = ctypes.windll.kernel32.GetLastError
    INVALID_HANDLE_VALUE = -1 #from msdn
    PAGE_READWRITE = 0x04 #from msdn
    ERROR_ALREADY_EXISTS = 0xB7 #from msdn
    h =_CreateFileMapping(INVALID_HANDLE_VALUE,0,PAGE_READWRITE,0,file_size, ctypes.c_wchar_p(file_name))
    return (h != INVALID_HANDLE_VALUE) and (_GetLastError() == ERROR_ALREADY_EXISTS)

相关问题 更多 >

    热门问题