TP2 : Multiprocessus et signaux


Mise en situation
Le travail de ce TP se déroule seul.
Temps alloué : 7h
La programmation se fait directement sur la carte avec geany (gcc)
|
Objectif
- Prise en main de la carte
- Compilation du C avec gcc
- Programmation du multiprocessus et envoi de signaux
|
Pré requis
Programmation C (1er année)
Aide C : Référence
|
Travail demandé
Un listing du code source commenté
Démonstration au professeur de la progression.
|
Critères d’évaluation
Clarté de l’ algorithme, lisibilité du code, exécutable opérationnel.
|
On veut créer un chronomètre précis au dixième de seconde. On veut pouvoir le démarrer, le stopper, le remettre à zéro et quitter l'application chronomètre.
Pour pouvoir chronométrer et attendre la prochaine commande, nous allons utiliser deux processus, un père qui crée le fils et attend une commande au clavier, et un fils qui s'occupe du chrono.
Création du projet TP2Pere avec geany
Remarque : pour ce TP, nous utiliserons qu'un seul exécutable.
- Aller dans le répertoire /home/pi/projets
- Lancer geany
- Créer un nouveau projet
- Renommer le fichier ouvert avec comme extension .c
- Afficher "bonjour le monde". Exécuter le programme.
- Compiler F9
- Excécuter F5
Création des processus
- Faire le programme qui crée un fils avec fork
- Faire deux fonctions : chrono() qui sera appelée dans le processus fils et choix(int) qui sera appelée dans le processus père. Tester en mettant une trace dans chaque processus
Programmation du choix
- Saisir un choix entre maz, démarrer, stopper, finir
- Suivant le choix saisi, envoyer un signal au fils. Utiliser les constantes prédéfinies SIGUSR1, SIGUSR2 et SIGABRT
Programmation du chrono
- Armer les signaux sur des fonctions d'IT qui ne changerons que des variables globales
Boucler à l'infini, en fonction de l'état des variables faire les choix de stopper, démarrer ou mettre à zéro
Remarques : Deux fonctions utiles :
//Efface l'écran
void clrscr()
{
system("clear");
}
// Met le curseur de l'écran en x et y
void gotoxy(int x, int y)
{
char chaine[15];
sprintf(chaine, "tput cup %d %d", x, y);
system(chaine);
}

