• Non ci sono risultati.

Programmation Système TP 6 : signaux

N/A
N/A
Protected

Academic year: 2021

Condividi "Programmation Système TP 6 : signaux"

Copied!
1
0
0

Testo completo

(1)

Programmation Système TP 6 : signaux

Juliusz Chroboczek Khouloud Zine Elabidine

5 novembre 2012

Exercice 1 (Alarm).

1. Écrivez un programme qui pose trois questions sur la de votre choix à l’utilisateur. À chaque fois, l’utilisateur doit répondre par « oui » ou par « non ».

2. Modifiez votre programme pourqu’il accorde un délai de 12 secondes par question. Lorsque ce délai est dépassé, votre programme affichera le message Temps de reflexion dépassé puis le processus terminera.

Exercice 2 (Pointeurs nuls). Le pointeur nul NULL a un comportement qui dépend du système : sur certains systèmes (notamment Linux), lire ou écrire à l’adresse nulle a pour effet de tuer le processus à l’aide d’un signal SIGSEGV ; sur d’autres (notamment HP-UX), une lecture à l’adresse nulle réussit, et retourne 0.

Écrivez un programme qui affiche « Lecture à l’adresse nulle autorisée. » si une lecture à l’adresse nulle est autorisée, et « Lecture à l’adresse nulle interdite. » sinon.

Dans aucun cas votre programme ne devra se planter.

Exercice 3 (Utilisation de sigaction).

1. Écrivez un programme qui exécute le corps d’une boucle vide un milliard de fois.

2. En utilisant sigaction, modifiez votre programme pour qu’il ne s’interrompe pas lorsqu’on appuie sur ^C mais qu’il affiche la valeur du compteur de boucle. Que se passe-t-il si vous appuyez sur ^C plusieurs fois de suite ?

3. Modifiez votre programme pour qu’il positionne le flag SA_RESETHAND. Que se passe-t-il si vous appuyez sur ^C plusieurs fois de suite ?

Exercice 4 (Ping-pong). Écrivez un programme qui crée un processus fils. À chaque fois qu’il reçoit un signal SIGUSR1, le père affiche la chaîne « Ping ! », attend une seconde, puis envoie un siginal SIGUSR2 au fils. De même, à chaque fois qu’il reçoit un signal SIGUSR2, le fils affiche la chaîne « Pong ! », attend une seconde, puis envoie un signal SIGUSR1 au père. Dès qu’il a mis en place le gestionnaire de signal, le fils envoie un premier signal SIGUSR1 au père. (Attention

— le père doit-il mettre en place le gestionnaire de signal avant ou après avoir créé le fils ?) Pourquoi ce programme n’est-il pas fiable ? Comment pourrait-on corriger ce problème ? (Nous ne vous demandons pas d’implémenter votre solution.)

1

Riferimenti

Documenti correlati

In the early days of UNIX, the “reputation” of signals was pretty bad, due to a number of unreliability causes in signal delivery.. We refer to signal implementation and

A condition variable is a rendez-vous point where observers interested in the state of a shared resource can wait for some condition to be verified; complementary, others can

Once done working on a shared memory segment, a process can detach it from its address space using shmdt:.

Modifiez cat2 pour qu’il concatène dans ce fichier les divers fichiers qui lui sont donnés à la suite sur la ligne de commande..

Écrivez un programme qui crée deux processu, un père qui affiche à l’aide de l’appel système write la chaîne "Je suis le père\n", et un fils qui affiche la chaîne

Modifiez votre programme pour que, une fois la commande exécutée, il affiche comment elle s’est terminée — soit Terminaison normale avec résultat n, soit Tuée par le signal n,

Modifiez votre programme pour que chaque appel à premier se fasse dans un processus séparé ; vous utiliserez la valeur de retour du processus pour indiquer si l’entier était

Modifiez votre programme pour que chaque appel à premier se fasse dans un processus séparé ; vous utiliserez la valeur de retour du processus pour indiquer si l’entier était