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
Les commandes kn et pc

Examen -- Partie Unix

Philippe Marquet

Septembre 2000

Documents de cours et TD 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é.

  Important
Plusieurs commandes ou codes Bourne-shell sont à développer. On veillera particulièrement à détailler pour chacune des commandes, chacun des codes, un algorithme avant de donner le code Bourne-shell lui-même. La notation sera répartie entre ces deux composantes de vos réponses.





1  Kill Netscape, kn

Utilisateur de Netscape, vous avez déjà rencontré le problème suivant : lors du chargement d'une page, Netscape vous indique Starting Java... et se fige ! Il ne reste alors plus qu'à supprimer le processus Netscape et à relancer le navigateur.

Nous allons développer la commande kn qui va terminer Netscape proprement. En effet, lors de son lancement, Netscape crée un fichier de verrou destiné à éviter deux exécutions simultanées de Netscape par un même utilisateur.

Ce fichier de nom lock est situé dans le répertoire .netscape de l'utilisateur. C'est en fait un lien symbolique qui mémorise quelques informations :
% ls -l ~/.netscape/lock
lrwxrwxrwx   1 phm  18 Sep 06 13:36 /users/phm/.netscape/lock -> 134.206.10.42:23171
Le numéro 134.206.10.42 est le numéro IP de la machine sur laquelle s'exécute Netscape. Le numéro 23171 est le numéro du processus Netscape sur cette machine.
Question 1  [Pourquoi un verrou ?]   Expliquez pourquoi est-ce que Netscape veut éviter deux invocations simultanées par le même utilisateur.

Question 2  [kn]   Développer le commande Bourne-shell kn.

Les commandes suivantes peuvent être utiles :

2  Planche contacte, pc

Il s'agit de générer automatiquement des pages HTML de présentations de photographies. On va développer une commande pc qui générera Les photographies sont disponibles sous forme de fichiers JPEG (extension .jpg) dans le répertoire courant. Par exemple :
% ls *.jpg
depart.jpg    descente.jpg  soleil-2.jpg
picnic.jpg    soleil-1.jpg  sommet.jpg      
%

  La page principale

La page HTML principale est construite sur le modèle suivant. Par défaut, il s'agit du fichier index.html.
% cat index.html
<HTML>

<HEAD>
  <META NAME="Generator" CONTENT="pc">  
  <TITLE>Mon ascension de la Dent du Rocher</TITLE>
</HEAD>

<BODY>

  <H1>Mon ascension de la Dent du Rocher</H1>

  <CENTER>
    <A HREF="depart.html"><IMG SRC="depart.jpg" HSPACE="3" VSPACE="3"
      BORDER="0" ALIGN="MIDDLE" WIDTH="80"></A>  
    <A HREF="soleil-1.html"><IMG SRC="soleil-1.jpg" HSPACE="3" VSPACE="3"
      BORDER="0" ALIGN="MIDDLE" WIDTH="80"></A>  
    <A HREF="soleil-2.html"><IMG SRC="soleil-2.jpg" HSPACE="3" VSPACE="3"
      BORDER="0" ALIGN="MIDDLE" WIDTH="80"></A>  
    <A HREF="sommet.html"><IMG SRC="sommet.jpg" HSPACE="3" VSPACE="3"
      BORDER="0" ALIGN="MIDDLE" WIDTH="80"></A>  
    <A HREF="picnic.html"><IMG SRC="picnic.jpg" HSPACE="3" VSPACE="3"
      BORDER="0" ALIGN="MIDDLE" WIDTH="80"></A>  
    <A HREF="descente.html"><IMG SRC="descente.jpg" HSPACE="3" VSPACE="3"
      BORDER="0" ALIGN="MIDDLE" HEIGHT="80"></A>  
  </CENTER>

  <ADDRESS>Laurent Duchmol</ADDRESS>

</BODY>
</HTML>
%
Dans ce fichier on remarque le titre de la page (par défaut Planche contacte). L'adresse de l'auteur est précisée (par défaut elle est absente). Pour chaque photographie, on référence une page HTML de même nom que la photographie (par exemple soleil-1.html) et on insère une vignette de la photographie (élément IMG). Dans cet élément IMG, les attributs HSPACE, VSPACE, BORDER, et ALIGN réalisent une mise en page correcte des images [Dans la dernière spécification HTML, l'utilisation de ces attributs est déconseillée en faveur de l'utilisation de feuilles de style.]. Enfin la valeur (par défaut 80 pixels) d'un attribut WIDTH ou HEIGHT est précisée. Cet attribut précise la taille de la vignette à afficher. Pour les photographies horizontales, on précise la largeur (WIDTH) alors que pour les photographies verticales on précise la hauteur (HEIGHT).

  Les pages individuelles

Pour chaque photographie on produit une page HTML, par exemple :
% cat soleil-1.html
<HTML>

<HEAD>
  <META NAME="Generator" CONTENT="pc">  
  <TITLE>Mon ascension de la Dent du Rocher</TITLE>
</HEAD>

<BODY>

  <CENTER>
    <IMG SRC="soleil-1.jpg" ALIGN="MIDDLE"</A>  
    <BR>
    Le lever du jour
  </CENTER>

  <A HREF="depart.html">Precédente</A> / 
  <A HREF="index.html">Planche contacte</A>
  / <A HREF="soleil-2.html">Suivante</A>

  <ADDRESS>Laurent Duchmol</ADDRESS>

</BODY>
</HTML>
%
Le titre de la page et l'adresse de l'auteur sont repris de la page principale. L'image JPEG est maintenant affichée sans contraindre sa taille. (Le marqueur BR dénote une fin de ligne.) On précise éventuellement la légende de l'image (ici Le lever du jour). Une seconde partie de la page permet la navigation vers la photographie précédente (si elle existe), la page principale, et la photographie suivante (si elle existe).

  Les informations

Différentes informations sont nécessaires à la génération des ces pages HTML. Elles sont regroupées dans deux fichiers de configuration dans le répertoire courant : config.cfg et images.cfg. Ces fichiers peuvent ne pas exister ; des valeurs par défaut sont alors utilisées.

Le fichier images.cfg précise dans quel ordre les photographies doivent être présentées. Par ailleurs la légende de l'image peut aussi être donnée dans ce fichier. Voici un exemple de tel fichier :
% cat image.cfg 
depart.jpg      Le départ à la frontale
soleil-1.jpg    Le lever du jour 
soleil-2.jpg    Le lever du jour (2)
sommet.jpg      
picnic.jpg      Un pique-nique mémorable 
descente.jpg  
%
En l'absence d'un tel fichier, l'ensemble des fichiers JPEG du répertoire courant tel que donné par la commande ls donne la liste des photographies.

La légende d'une photographie qui n'est pas donnée dans le fichier de configuration est alors recherchée dans le fichier JPEG lui-même. Un tel fichier peut contenir des blocs de texte dits blocs COM (commentaires/comment). La commande rdjpgcom (read JPEG COM) affiche ces blocs. Nous décidons qu'un bloc préfixé par le mot CAPTION: mémorise la légende de la photographie :
% rdjpgcom sommet.jpg
CREATOR: XV Version 3.12  Rev: 12/22/98 Quality = 75, Smoothing = 0
CAPTION: Enfin... l'arrivée au sommet
%
Le fichier config.cfg code les valeurs de certains paramètres. Ces paramètres sont :
TITLE
Le titre de la planche contacte (Planche Contacte par défaut).
ADDRESS
Le nom de l'auteur (chaîne vide par défaut).
VIGNETTESIZE
La taille des vignettes (80 par défaut).
MAINHTML
Le nom du fichier HTML principal (index.html par défaut).
Par exemple :
% cat config.cfg
TITLE=Mon ascension de la Dent du Rocher
ADDRESS=Laurent Duchmol
%

  Les questions


Question 3  [getval]   Développer une commande Bourne-shell getval qui affiche la valeur d'un paramètre de nom donné. Cette valeur est recherchée dans le fichier de configuration ou la valeur par défaut est retournée. Exemple :

% getval TITLE 
Mon ascension de la Dent du Rocher
% getval MAINHTML
index.html
%

Question 4  [previous et next]   Développer une commande Bourne-shell previous qui donne le nom de la photographie précédente. Par exemple :

% previous soleil-1
depart
% previous depart

%
(De même, on supposera que l'on dispose d'une commande next qui affiche le nom de la photographie suivante.)

Question 5  [generateone]   Développer une commande generateone qui génère la page HTML d'une photographie donnée en paramètre.

Question 6  [generateonevignette]   Développer une commande Bourne-shell generateonevignette qui affiche le code HTML d'une vignette dans le fichier principal. Par exemple :

% generateonevignette depart
    <A HREF="depart.html"><IMG SRC="depart.jpg" HSPACE="3" VSPACE="3"
      BORDER="0" ALIGN="MIDDLE" WIDTH="80"></A>  
%

Question 7  [pc]   Développer la commande Bourne-shell pc.

  Les outils


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