Exercice 1.
Exécuter le programme suivant. Que se passe-t-il ? Pourquoi ?
Comment y remédier ?
#include <stdio.h>
#include
<sys/types.h>
#include <unistd.h>
int main (
void )
{
printf (
"Bonjour " ) ;
if ( fork ( ) )
printf ( "Monsieur\n" ) ;
else
printf ( "Madame\n"
) ;
return 0 ;
}
Exercice 2.
Ecrire un programme ayant la syntaxe suivante:
matproc n m
L'action de ce programme doit être de générer
n processus, chacun d'entre eux
devant générer
n
processus à son tour et ainsi de suite juqu'à
m niveaux. Combien de processus
sont générés au total ?
Exercice 3.
On désire connaître la capacité d'un tube. Pour
cela, on propose d'envoyer des données, en les comptant, dans un
tube qu'aucun lecteur ne consulte (ouvert en lecture, mais jamais lu
par un processus). Au bout d'un certain nombre d'octets,
l'écrivain se bloque en attendant que le tube se vide.
Exercice 4.
On se
propose d'écrire un programme qui liste les
n premiers nombres premiers. Pour
cela on choisit d'implanter l'algorithme du crible d'Eratosthène.
Ecrire un programme qui crée
n
processus, le premier passe au second tous les nombres entiers de 2
à
n², le
second affiche le premier nombre reçu (i.e. le nombre 2) sur la
sortie standard et
passe ensuite tous les nombres reçus qui ne sont pas des
multiples de 2 au
troisième, le troisième affiche le premier nombre
reçu (i.e. le nombre 3) sur la
sortie standard et passe ensuite tous les nombres reçus qui ne
sont pas des multiples
de 3 au quatrième, et ainsi de suite jusqu'au
(n-1)-ième qui affiche
le premier nombre reçu (disons p) sur la sortie standard et
passe ensuite tous les nombres reçus qui ne sont pas des
multiples de p au
n-ième,
le
n-ième affiche le
premier nombre reçu, tue tous les autres processus et se termine.
Exercice 5.
Ecrire un programme qui:
- attend une ligne (une commande) sur l'entrée standard
(vous pouvez utiliser la fonction de bibliothèque fgets).
- la décompose en mots séparés par des espaces
- exécute cette commande par le biais de la primitive
système execvp.
- revienne au point 1.
Félicitations vous avez écrit un shell !
Exercice 6.
Reprendre le programme précédent et ajouter un traitement
spécial dans le cas où la commande est terminée
par le symbole
&.
Exercice 7.
Réaliser le jeu "deviner un nombre". On écrira 2
programmes C : un client et un serveur qui communiquent via des tubes
nommés. Le serveur choisit un nombre
au
hasard
entre 1 et 1000, crée 2 tubes nommés
question et
reponse et, à chaque fois
qu'il reçoit une proposition sur le tube
question, renvoie sa réponse
(signifiant "trop petit", "trop grand" ou "égal") sur le tube
reponse. Le client lit des
propositions de nombre sur l'entrée standard et pour chaque
proposition de nombre, envoie ce nombre au serveur et affiche la
réponse du serveur.