windows c : 未能创建文件的 mmap
windows c : failed to create mmap of a file
我需要创建文件的 mmap。由于 windows 不支持 mmap,我尝试了 MapViewOfFile() 方法。但这失败了。
这是我的代码:
char template[1024];
snprintf(template, sizeof(template) / sizeof(char), "%s", "C:\Users\Ijas\Downloads\ijas.txt");
HANDLE hfile = CreateFile(template, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL);
if (hfile == INVALID_HANDLE_VALUE)
{
fprintf(stderr, "CreateFile() error 0x%08x \n", GetLastError());
return NULL;
}
HANDLE map_handle = CreateFileMapping(hfile, NULL, PAGE_READWRITE | SEC_RESERVE, 0, 0, 0);
if (map_handle == NULL)
{
fprintf(stderr, "CreateFileMapping() error 0x%08x\n", GetLastError());
CloseHandle(hfile);
return NULL;
}
sp = (char*)MapViewOfFile(map_handle, FILE_MAP_WRITE | FILE_MAP_READ, 0, 0, 0);
if (sp->buffer == NULL)
{
fprintf(stderr, "MapViewOfFile() error 0x%08x\n", GetLastError());
CloseHandle(hMapFile);
CloseHandle(hfile);
return NULL;
}
输出:
CreateFile() error 0x00000003
提示:模板是一个现有文件。
我的代码有什么问题吗?请帮帮我?
正如评论中所讨论的那样,有多种尝试命中的可能性,问题似乎出在 Unicode
和 Ansi
上。 template
被声明为 char*
但被传递给 CreateFile
,后者默认调用 CreateFileW
。如果 OP 使用 C++ 编译器编译代码,编译器会抱怨这一点,但使用 C 编译器,它只依赖于编码器的智慧。
CreateFileA
期望 const char*
而 CreateFileW
期望 const wchar_t*
我需要创建文件的 mmap。由于 windows 不支持 mmap,我尝试了 MapViewOfFile() 方法。但这失败了。
这是我的代码:
char template[1024];
snprintf(template, sizeof(template) / sizeof(char), "%s", "C:\Users\Ijas\Downloads\ijas.txt");
HANDLE hfile = CreateFile(template, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL);
if (hfile == INVALID_HANDLE_VALUE)
{
fprintf(stderr, "CreateFile() error 0x%08x \n", GetLastError());
return NULL;
}
HANDLE map_handle = CreateFileMapping(hfile, NULL, PAGE_READWRITE | SEC_RESERVE, 0, 0, 0);
if (map_handle == NULL)
{
fprintf(stderr, "CreateFileMapping() error 0x%08x\n", GetLastError());
CloseHandle(hfile);
return NULL;
}
sp = (char*)MapViewOfFile(map_handle, FILE_MAP_WRITE | FILE_MAP_READ, 0, 0, 0);
if (sp->buffer == NULL)
{
fprintf(stderr, "MapViewOfFile() error 0x%08x\n", GetLastError());
CloseHandle(hMapFile);
CloseHandle(hfile);
return NULL;
}
输出:
CreateFile() error 0x00000003
提示:模板是一个现有文件。
我的代码有什么问题吗?请帮帮我?
正如评论中所讨论的那样,有多种尝试命中的可能性,问题似乎出在 Unicode
和 Ansi
上。 template
被声明为 char*
但被传递给 CreateFile
,后者默认调用 CreateFileW
。如果 OP 使用 C++ 编译器编译代码,编译器会抱怨这一点,但使用 C 编译器,它只依赖于编码器的智慧。
CreateFileA
期望 const char*
而 CreateFileW
期望 const wchar_t*