Outils pour utilisateurs

Outils du site


td_-_processus

Ceci est une ancienne révision du document !


%————————————————————– \chapter{Processus (4 heures)}

\begin{itemize} \item Cr\'eation de processus \item Descripteurs de fichiers \item Redirection de signaux \end{itemize}

\section{Cr\'eation de processus}

Que font chacun de ces deux programmes ?

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

main() {

int i;
for (i=1;i<=8;i++)
  fork();
printf("%d\n",i);

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

int i=10;

f(){ printf(“%d\n”,i++); }

g(){ f();fork();f(); }

main(){ g();g(); } \end{verbatim} \end{minipage} \end{center}

\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.1548174824.txt.gz · Dernière modification : 2019/01/22 16:33 de gilles