Table des matières

Processus (4 heures)

Le but de ce TD est d'appréhender la manipulation de processus par le biais de la librairie standard.

Q.1 - Création de processus

Que font chacun de ces deux programmes ?

#include <stdio.h>
 
main()
{
  int i;
  for (i=1;i<=8;i++)
    fork();
  printf("%d\n",i);
}
#include <stdio.h>
 
int i=10;
 
f(){ printf("%d\n",i++); }
 
g(){ f();fork();f(); }
 
main(){ g();g(); }

Q.2 - Duplication de l'espace mémoire

Que font chacun de ces deux programmes ?

#include <stdio.h>
 
main() {
  printf("Bonjour\n");
  if (fork())
    printf("Papa\n");
  else
    printf("Maman\n");
}
#include <stdio.h>
 
main() {
  printf("Bonjour ");
  if (fork())
    printf("Papa\n");
  else
    printf("Maman\n");
}

Q.3 - Apprenti sorcier

Que font chacun de ces deux programmes ?

#include <stdio.h>
 
main() {
   while (1) {
      if (fork())
          break;
      else {
          putchar('.');
          continue;
      }
      putchar(':');
  }
}
#include <stdio.h>
 
main() {
   while (1) {
      if (!fork())
          break;
      else {
          putchar('.');
          continue;
      }
      putchar(':');
  }
}

Q.4 - Attente de terminaison

Ecrire un programme qui crée N processus fils qui affichent les entiers de 1 à N (chaque processus fils n'affichant qu'un seul entier). Synchroniser les processus pour garantir que l'affichage se fait dans l'ordre croissant.

Q.5 - Redirection d'entrée standard

Ecrire un programme C qui lit sur l'entrée standard stdin un nom de fichier puis qui redirige l'entrée standard sur ce fichier, y lit le contenu et l'affiche sur la sortie standard, et recommence le tout (à partir de l'entrée au clavier du nom de fichier) indéfiniment.

Q.6 - Tube

Même exercice que précédemment, mais le flux de sortie est redirigé vers un autre processus qui passe toute minuscule en majuscule. Attention, le message demandant à chaque itération d'entrer le nom de fichier doit s'afficher sur l'écran ; et la lecture du nom sur le clavier.

Q.7 - L'immortel

Ecrire un programme qui compte le nombre de fois que la séquence Control-C est entrée au clavier. Une précision : Control-C poste le signal SIGINT au processus à l'avant-plan.

Comment arrêter ce programme ?