windows c:无法创建文件的mmap

时间:2016-06-07 06:43:08

标签: c windows mmap createfile

我需要创建一个文件的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

提示:模板是现有文件。

我的代码有什么问题吗?请帮帮我?

1 个答案:

答案 0 :(得分:2)

正如评论中所讨论的,尝试和点击的各种可能性,问题似乎与UnicodeAnsi有关。 template被声明为char*,但会传递给CreateFile,默认情况下会调用CreateFileW。如果OP会用C ++编译器编译代码,那么编译器会抱怨这个,但是对于C编译器,它只是依赖于编码器的智能。

CreateFileA期待const char*CreateFileW期待const wchar_t*