Print
Category: Uncategorised
Hits: 19142

 TP3 - Programmation système (M3101-1) SE TP UE31

Création de processus - variables d'environnement

 

 

Exercice 1 : un peu de généalogie

Examinez le programme mesForks.c (vieille version mes_fork.c). Essayez d'abord de deviner ce qu'il va afficher. Ensuite, compilez-le et exécutez-le.
Dans votre rapport, vous donnerez :

Modifiez le code afin d'observer des zombies (utiliser sleep()). Vous pourrez les observer avec la commande ps aux.

 

Exercice 2 : écriture d'un shell basique

Écrivez un programme shell1 implémentant les fonction basiques d'un interpréteur de commande (« shell »). Ce programme boucle sur les trois actions suivants :

  1. affichage d'un message d'invite,
  2. saisie d'une commande,
  3. exécution de la commande saisie,

jusqu'à ce que l'utilisateur saisisse le caractère fin de fichier (CTRL+D) ou la commande spéciale exit.

Remarques :

Vous aurez besoin des appels systèmes fork(2), waitpid(2) et execvp(3).

 

Exercice 3 : gestion de l'environnement dans le shell

Rappel : Tout processus possède un _environnement_ : c'est une liste de variables possédant un nom (traditionnelle­ment en majuscules) et une valeur (chaîne de caractères). Cet environnement peut être affiché par la com­mande env. Comme toutes les propriétés d'un processus, l'environnement du processus père est copié pour chaque processus fils (c'est ainsi que la commande env permet d'afficher l'environnement du shell qui l'a lancé...).

Écrivez un programme shell2, basé sur celui de l'exercice précédent, pourvu d'une commande interne permettant de modifier sont environnement. Cette commande prendra la forme

    export NOM=valeur


NB: vous pourrez utiliser la fonction separe_egal spécifiée dans le fichier ligne_commande.h.

Par ailleurs, vous modifierez votre shell pour que, si la variable d'environnement INVITE est définie, c'est sa valeur qui sera affichée en guise d'invite.

Vous aurez besoin des appels systèmes getenv(3) et setenv(3).

Dans votre rapport, vous expliquerez pourquoi la commande export doit être implémentée comme une commande interne (c.à.d. à l'intérieur du shell) et non comme une commande externe (un programme lancé par le shell).