Я сопоставил файл неизвестного размера (около 4-6 ГиБ) на платформе Windows и получил указатель на начало данных файла, возвращаемых из функции MapFileView. Но как я могу узнать, что достиг конца файла при последовательном доступе к данным с помощью указателя?
Вот код, который я уже написал, и он успешно отображает файл и возвращает указатель:
#include <Windows.h>
#include <stdio.h>
#include <inttypes.h>
int main()
{
HANDLE hFile = CreateFile("Test.bin",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (!hFile)
{
printf("Could not create file (%lu).\n", GetLastError());
exit(1) ;
}
HANDLE hMapFile = CreateFileMappingA(hFile,
NULL,
PAGE_READWRITE,
0,
0,
NULL);
if (!hMapFile)
{
printf("Could not create file mapping object (%lu).\n", GetLastError());
CloseHandle(hFile);
exit(1);
}
int32_t* pBuf = (int32_t*) MapViewOfFile(hMapFile,
FILE_MAP_ALL_ACCESS,
0,
0,
0);
if (!pBuf)
{
printf("Could not map file (%lu).\n", GetLastError());
CloseHandle(hFile);
CloseHandle(hMapFile);
exit(1);
};
UnmapViewOfFile(pBuf);
CloseHandle(hFile);
CloseHandle(hMapFile);
exit(0);
}
Итак, я хотел прочитать разные части файла одинакового размера одновременно в нескольких потоках. Я считаю, что отображенный файл является правильным выбором для этой цели. Советы по поводу любых других более быстрых и возможных подходов высоко ценятся.
Я исследовал некоторые подобные вопросы на форуме, и я полагаю, что это самая близкая тема c, которую я мог найти: Читать все содержимое памяти сопоставленный файл или Access Mapped View Accessor, не зная его размера Но этот ответ использует C# и не написан с использованием WinAPI, поэтому я не мог понять их процесс.
Спасибо в заранее :)