Laboratoire 14 - Appel système mmap

Page content

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 et munmap 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 commande tac. 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 fonction memmem (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
[...]