#include #include #include int main(int argc, char *argv[]) { if (argc < 3) { printf("FIBSTR N(Mb) [O]\n"); return 0; } unsigned N, O = 2; sscanf(argv[2], "%u", &N); N <<= 20; if (argc > 3) { sscanf(argv[3], "%u", &O); O = min(26, max(2, O)); } HANDLE fh = CreateFile( argv[1], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, 0); HANDLE fmh = CreateFileMapping(fh, 0, PAGE_READWRITE, 0, N, 0); char * const beg = static_cast( MapViewOfFile(fmh, FILE_MAP_WRITE, 0, 0, N)); // unsigned len[32]; for (unsigned i = 0; i != min(N, O); ++i) { beg[i] = static_cast('a' + i); len[i] = 1; } if (N > O) { char *cur = beg + O; unsigned curLen = 0; for (; cur != beg + N; ) { const unsigned len2 = min( cur - beg - len[curLen], static_cast(beg + N - cur)); CopyMemory(cur, beg, len2); len[curLen++] = cur - beg; if (curLen == O) curLen = 0; cur += len2; } } for (unsigned i = 0; i < N; ) { const unsigned r = rand(), r2 = rand() * rand(); if (r < 0x6000) i += r2 % 0x40; else if (r < 0x7000) i += r2 % 0x80; else if (r < 0x7800) i += r2 % 0x100; else if (r < 0x7ff8) i += r2 % 0x1000; else i += r2 % (min(0x100000, N / 0x10)); // if (i < N) beg[i] = '\n'; } // UnmapViewOfFile(beg); CloseHandle(fmh); CloseHandle(fh); }