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 ?