Ceci est une ancienne révision du document !
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.
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(); }
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"); }
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(':'); } }
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.
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.
Pipe
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.
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 ?