Ce document a été produit par HEVEA.
Votre browser peut avoir a être configuré pour afficher correctement certains symboles.
Reportez-vous à la
documentation d'HEVEA.

Licence d'informatique
Module de C/Unix
Compression d'exécutables

Examen -- Partie Unix

Philippe Marquet

Septembre 1997

Les documents de cours et TD sont autorisés.
On rendra deux copies séparées pour la partie Unix et pour la partie langage C. La partie Unix est à rendre sur une copie de couleur.

Ce document est disponible sous forme d'un fichier PostScript compressé.

1  Questions de cours


Question 1  [Espace disque/quota]   Chapitre << Système de fichiers --- Commandes de base >>
Expliquer pourquoi les résultats des commandes quota -v
et du -s ${HOME} peuvent différer.

Question 2  [Substitution des expressions régulières]   Chapitre << Interpréteur de commandes >>
Expliquer en quoi il est intéressant que les substitutions d'expressions régulières pour les fichiers soient réalisées par le shell lui-même.

Question 3  [Domain Name System]   Chapitre << Aspects réseaux >>
Expliciter l'algorithme de résolution dynamique d'un nom de machine à l'aide de serveurs DNS.

2  Compression d'exécutables

Note : La commande compexe est inspirée de la commande gzexe du paquetage GNU gzip.




La commande compexe que vous allez écrire est utilisée pour compresser des fichiers exécutables. Cette compression produit un fichier exécutable auto-décompressable. Un tel fichier peut être exécuté de manière transparente pour l'utilisateur (modulo une perte de performance).

Par exemple, la commande
compexe /bin/cat 
produira les deux fichiers suivants :
% ls -lg /bin/cat*
-rwxr-xr-x   1 root     root         8264 Dec 20 08:45 /bin/cat
-rwxr-xr-x   1 root     root        16204 Jul 29 05:19 /bin/cat~
Le fichier /bin/cat  est le fichier originel ; le fichier /bin/cat est la copie auto-décompressable de ce fichier. Le fichier /bin/cat  peut être détruit si le fichier auto-décompressable fonctionne bien.

Il est évident que cette commande n'a d'interêt que pour des systèmes possédant un espace disque très limité ou dans le cas d'un sujet de programmation Shell...

  Quelques informations
On suppose que vous avez dans un fichier un exécutable compressé que vous désiriez exécuter. Les informations suivantes sur le fichier originel sont nécessaires pour pouvoir exécuter ce fichier compressé :
Question 4  [Exécuter un fichier compressé]   Donnez le code Bourne-shell qui, à partir des informations précédentes, permette d'exécuter un fichier compressé.

On décide de construire le fichier exécutable auto-décompressable sur le modèle suivant :
#!/bin/sh 
skip=...
<Code Bourne-shell long de skip-2 lignes>
<Exécutable compressé>

Question 5  [Extraire l'exécutable]   Donnez le code Bourne-shell nécessaire pour extraire l'exécutable inclus dans un tel fichier auto-décompressable.

Question 6  [Auto-décompression]   À partir des questions 4 et 5, donnez la forme du code Bourne-shell situé en entête d'un fichier exécutable auto-décompressable.

  Syntaxe
La syntaxe de la commande compexe est la suivante :
compexe    [-c|-d]    [ -C compressCmd    -D uncompressCmd ]    executable

L'option -c (option par défaut) indique de produire un exécutable auto-décompressable à partir de l'exécutable executable. L'option -d indique de remplacer l'exécutable auto-décompressbale par sa version originelle.

Les options -C et -D spécifient d'utiliser les commandes compressCmd et uncompressCmd pour réaliser les compressions et décompressions. Ces commandes doivent lire leur entrée sur stdin et produire leur résultat sur stdout. Par défaut on utilisera la commande de compresion gzip -best -c et la commande de décompresssion zcat.
Question 7  [La commande compexe]   Donnez le code Bourne-shell de la commande compexe ainsi définie.


Ce document a été traduit de LATEX par HEVEA.