Outils pour utilisateurs

Outils du site


td_-_processus

Ceci est une ancienne révision du document !


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(); }

\section{Duplication de l'espace m\'emoire}

Que font chacun de ces deux programmes ?

\begin{center} \begin{minipage}{7cm} \begin{verbatim} #include <stdio.h>

main() {

printf("Bonjour\n");
if (fork())
  printf("Papa\n");
else
  printf("Maman\n");

} \end{verbatim} \end{minipage} \begin{minipage}{7cm} \begin{verbatim} #include <stdio.h>

main() {

printf("Bonjour ");
if (fork())
  printf("Papa\n");
else
  printf("Maman\n");

} \end{verbatim} \end{minipage} \end{center}

\section{Apprenti sorcier}

Que font chacun de ces deux programmes ?

\begin{center} \begin{minipage}{7cm} \begin{verbatim} #include <stdio.h>

main() {

 while (1) {
    if (fork())
        break;
    else {
        putchar('.');
        continue;
    }
    putchar(':');
}

} \end{verbatim} \end{minipage} \begin{minipage}{7cm} \begin{verbatim} #include <stdio.h>

main() {

 while (1) {
    if (!fork())
        break;
    else {
        putchar('.');
        continue;
    }
    putchar(':');
}

} \end{verbatim} \end{minipage} \end{center}

\section{Attente de terminaison}

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

\section{Redirection d'entr\'ee standard\label{exo-dup}}

\'Ecrire un programme C qui lit sur l'entr\'ee standard un nom de fichier puis qui redirige l'entr\'ee standard sur ce fichier, y lit le contenu et l'affiche sur la sortie standard, et recommence le tout (\`a partir de l'entr\'ee au clavier du nom de fichier) ind\'efiniment.

\section{Pipe}

M\^eme exercice que \ref{exo-dup}, mais le flux de sortie est redirig\'e vers un autre processus qui passe toute minuscule en majuscule. Attention, le message demandant \`a chaque it\'eration d'entrer le nom de fichier doit s'afficher sur l'\'ecran ; et la lecture du nom sur le clavier.

\section{Highlander}

\'Ecrire un programme qui compte le nombre de fois que la s\'equence Control-C est entr\'ee au clavier (i.e. que le signal SIGINT a \'et\'e envoy\'e au processus).

Comment arr\^eter ce programme ?

td_-_processus.1552473195.txt.gz · Dernière modification : 2019/03/13 10:33 de gilles