本文仅对系统的极端情况进行测试和描述,不考虑一般的替代方案。
在Windows下,使用OVERLAPPED方式,读取一个大文件(TEST.DAT, 200MB),示例代码如下(缩减):
HANDLE file_handle = 0;
DWORD numb_of_bytes = 0;
CHAR * file_buffer = new CHAR[1024 * 1024 * 128];
DWORD bytes_to_read = 1024 * 1024 * 64;
OVERLAPPED overlapped;
file_handle = CreateFile(
_T("D://TEST.DAT"),
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED
NULL);
overlapped.Internal = 0;
overlapped.InternalHigh = 0;
overlapped.Offset = 0;
overlapped.OffsetHigh = 0;
overlapped.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
BOOL result = ReadFile(file_handle, (void*)file_buffer, bytes_to_read, NULL, &overlapped);
result = GetOverlappedResul