Laboratoire 14 - Appel système mmap
Sommaire
Remarque: n’oubliez pas, lors de l’utilisation d’appels système, de traiter les cas d’erreurs.
mmap
L’objectif de cet exercice est de projeter un fichier en mémoire puis d’utiliser cette projection pour effectuer des opérations.
- Créez un programme
memcat
qui prend en argument le fichier à projeter et en affiche le contenu. Note: le fichier passé en argument doit nécessairement exister; le cas échéant affichez un message d’erreur adéquat. - Utilisez les appels système
mmap
pour projeter le fichier en mémoire etmunmap
pour détruire la projection.
$ ./memcat /usr/share/dict/words
A
A's
AMD
AMD's
AOL
AOL's
AWS
AWS's
Aachen
Aachen's
[...]
-
Modifiez le programme et créez
memtac
afin d’afficher le contenu du fichier dans l’ordre inverse. Similaire à la commandetac
. L’idée est de parcourir la projection depuis la fin et de chercher les caractères\n
pour identifier les lignes à afficher.Note: il n’y a pas besoin de copier les lignes à afficher, utilisez directement les indices de début et de fin de ligne en mémoire.
$ ./memtac /usr/share/dict/words
études
étude's
étude
épées
épée's
épée
émigrés
émigré's
émigré
élan's
[...]
- Développez un programme
memcount
qui affiche le nombre de fois où un certain motif fourni en argument est présent dans le fichier. Pour détecter un motif, vous pouvez utiliser la fonctionmemmem
(qui n’est pas POSIX mais suffisamment répandue).
$ ./memcount /usr/share/dict/words "fil"
152
- Modifiez le programme et créez
memgrep
afin d’afficher, seulement les lignes où le motif recherché est présent.
$ ./memgrep /usr/share/dict/words "fil"
affiliate
affiliate's
affiliated
affiliates
affiliating
affiliation
affiliation's
affiliations
defile
defile's
[...]