====== 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
main()
{
int i;
for (i=1;i<=8;i++)
fork();
printf("%d\n",i);
}
#include
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
main() {
printf("Bonjour\n");
if (fork())
printf("Papa\n");
else
printf("Maman\n");
}
#include
main() {
printf("Bonjour ");
if (fork())
printf("Papa\n");
else
printf("Maman\n");
}
==== Q.3 - Apprenti sorcier ====
Que font chacun de ces deux programmes ?
#include
main() {
while (1) {
if (fork())
break;
else {
putchar('.');
continue;
}
putchar(':');
}
}
#include
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 ?