我需要创建一个文件的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
提示:模板是现有文件。
我的代码有什么问题吗?请帮帮我?
答案 0 :(得分:2)
正如评论中所讨论的,尝试和点击的各种可能性,问题似乎与Unicode
和Ansi
有关。 template
被声明为char*
,但会传递给CreateFile
,默认情况下会调用CreateFileW
。如果OP会用C ++编译器编译代码,那么编译器会抱怨这个,但是对于C编译器,它只是依赖于编码器的智能。
CreateFileA
期待const char*
而CreateFileW
期待const wchar_t*