Seminární skupina PB173 Tématicky zaměřený vývoj aplikací v jazyce C/C++

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: