Cvičenie 4: Pamäť
Teoretická časť:
- Virtuálna pamäť
- Memory-mapped files
- Haldy
Podporný učebný text:
Slidy k semináru:
Domáca úloha č.4: (termín odovzdania: 27.10.2010 vč.)
2 body
Vytvorte konzolovú aplikáciu, ktorá namapuje súbor, ktorý jej bude odovzdaný ako parameter príkazového riadku, a následne prevráti obsah tohto súboru. Aplikácia bude vedieť spracovať jednak súbory s ANSI kódovaním a jednak s Unicode kódovaním. Postup:
- Otvorte zadaný súbor pre čítanie a zapisovanie (
HANDLE hFile = CreateFile(...)
) - Zistite veľkosť tohto súboru (
fileSize = GetFileSize(hFile,...)
) - Vytvorte file-mapping objekt (
HANDLE hFileMapping = CreateFileMapping(hFile, ...)
). File-mapping objekt bude o 1 znak väčší než veľkosťhFile
súboru, nakoľko potrebujete obsah súboru ukončiť nulou, aby ste s ním mohli pracovať ako s obyčajným reťazcom. Počítajte s horšou variantou a síce, že súbor bude v Unicode... - Získajte adresu, kde je prvý byte súboru namapovaný do pamäte (
PVOID viewOfFile = MapViewOfFile(hFileMapping, ...)
) - Zistite, či je obsah súboru v ANSI alebo Unicode (
BOOL isUnicode = IsTextUnicode(viewOfFile, ...
)) a podľa toho postupujte ďalej - Obráťte súbor - na koniec súboru vložte nulu
- _strrev/_wcsrev
- ošetrite konce riadkov - v pôvodnom súbore \r\n, po prevrátení \n\r, takže jednotlivé dvojice upraviť
UnmapViewOfFile(viewOfFile)
- Zatvorte file-mapping objekt
- Odstráňte nulu z konca súboru (
SetFilePointer, SetEndOfFile
) - Zatvorte súbor
Pokiaľ je program spustený bez parametru, alebo so zlým parametrom, vypíšte nápovedu. Všetky možné chyby dôkladne ošetrite (error, final
). Používajte, prosím, logovací súbor.
Súbory, na ktorých môžete testovať svoj program: