Cyril Rabat


TP n°4 : processus et tubes

 Télécharger en PDF

   Le but de ce TP est de manipuler les appels systèmes relatifs à la gestion de processus et aux tubes nommé et anonyme.

 

Pour l'ensemble des questions suivantes, vous devez utiliser les fonctions C qui ont été introduites dans les cours correspondants. À noter que la gestion d'erreurs doit être correctement mise en place pour tous les appels systèmes

Création de processus

   L'objectif de cet exercice est de manipuler les commandes fork, wait (ou waitpid) et execve.

Questions

  1. Écrivez un programme qui prend en argument un entier n et qui crée ensuite n processus fils. Chaque fils génère un nombre aléatoire puis affiche son numéro de création (de 1 à n) et ce nombre aléatoire. Le père attend la fin de chaque fils.
  2.  

    Vous devez utiliser la procédure srand pour initialiser le générateur de nombres pseudo-aléatoires. Elle prend en paramètre une graine. Habituellement, on utilise la fonction time comme graine. La fonction rand permet ensuite de générer des entiers aléatoires dans l'intervalle [0; RAND_MAX].

  3. Modifiez votre programme pour que chaque fils attende un temps aléatoire (vous pouvez utiliser sleep). À la fin de chaque fils, le père doit indiquer le numéro de création et le PID du fils qui s'est arrêté. Pour le numéro de création, vous utiliserez la valeur de retour envoyée par exit.
  4. Modifiez votre programme pour ne plus utiliser la valeur envoyée par exit.
  5. Écrivez un premier programme qui prend en argument un entier i. Il affiche alors "Bonjour ; je vais attendre X secondes" (où X est la valeur de i) puis se met en pause pendant i secondes. Écrivez ensuite un deuxième programme qui prend en argument le nom du premier programme, un entier et qui exécute le premier programme à l'aide de execve en lui transmettant l'entier spécifié. Le deuxième programme doit attendre la fin du premier programme puis afficher un message de fin.

Les tubes anonymes

   Dans cet exercice, nous utiliserons les tubes anonymes (pour rappel, ils sont créés à l'aide de pipe).

 

Prenez un soin particulier à fermer systématiquement tous les descripteurs des tubes non utilisés, aussi bien dans les fils que dans le père.

Questions

  1. Écrivez un programme qui prend en argument un entier n et qui crée ensuite n tubes et n processus fils. Une fois tous les fils créés, le père lit depuis le clavier un numéro (entre 1 et n) et une chaine de caractères. Il envoie ensuite la chaîne de caractères au fils spécifié qui l'affiche. En cas de numéro incorrect, le père envoie un code de fin aux fils qui s'arrêtent. Une fois tous les fils terminés, le père s'arrête.
  2. Modifiez votre programme pour que chaque fils envoie son numéro au père à chaque fois qu'il reçoit un message.

Les tubes nommés et anonymes

   Pour cet exercice, nous allons développer deux applications : une application d'affichage et une application de saisie. L'application d'affichage permet d'afficher dans un seul terminal les informations envoyées par des applications de saisie. L'application d'affichage crée 4 tubes nommés, puis 4 fils, chacun se mettant en attente d'informations sur le tube nommé correspondant. Elle se met ensuite en attente de données provenant de ses fils et les affiche au fur-et-à-mesure. L'application de saisie prend en paramètre le nom du tube nommé dans lequel elle écrira toutes les données saisies par l'utilisateur.

Questions

  1. Créez une application qui crée un tube nommé, puis qui se met en attente de données (des chaînes de caractères). Les données sont affichées au fur-et-à-mesure dans le terminal.
  2. Créez une seconde application qui écrit les données saisies par l'utilisateur dans le tube nommé dont le nom est spécifié en argument. Cette application sera exécutée dans un autre terminal.
  3. Modifiez maintenant la première application pour qu'elle crée 4 tubes nommés et 4 fils qui sont en charge de lire les données reçues dans les tubes correspondant. Les données sont ensuite envoyées au processus père qui les affiche à l'écran.

Outils


Version de cette page Mardi 13 Février 2018

© Cyril Rabat 2016

Connexion

Mot de passe perdu

Dernières nouvelles

Aucune pour le moment

Contact

Courriel :
cyril.rabat [at] univ-reims.fr

Téléphone :
+33-326-91-33-81

Fax :
+33-326-91-33-97

Facebook :
lien Facebook direct