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 ?