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
Compression d'exécutables
Examen -- Partie Unix
Janvier 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é :
-
nom de la commande ;
- la commande utilisée pour compresser le fichier (par exemple
par la commande gzip de laquelle découle la commande à
utiliser pour le décompresser).
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.