:: Enseignements :: ESIPE :: INFO2 :: 2014-2015 :: Programmation système en C ::
| Fichiers et signaux |
Exercice 1 - My cat
- Utiliser l'appel système open() pour ouvrir un fichier qui sera spécifié sur la
ligne de commande. Lire les 10 premiers octets du fichier avec l'appel système read(),
puis les afficher sur la sortie standard en utilisant write(). Utiliser un buffer statique.
Rappel : 0=stdin, 1=stdout, 2=stderr.
- Toujours en utilisant un buffer statique, écrire un programme fonctionnant comme cat,
c'est-à-dire ouvrant un par un les fichiers spécifiés sur la ligne de commande, les lisant, et
les écrivant sur la sortie standard.
Exercice 2 - My cp
Réécrire un programme
cp simple (copie d'un fichier vers un autre). Pour créer le fichier
"cible", n'oubliez pas d'utiliser les flags
O_CREAT,
O_TRUNC, et le troisième
paramètre de
open(), pour positionner correctement les droits du fichier nouvellement
créé (regardez ce qui se passe si vous ne mettez pas cet argument).
Exercice 3 - Highlander
Écrire un programme qui "résiste" au signal
SIGINT (rappel: c'est ce signal qui est envoyé
lorsque vous tapez
Control-C dans le terminal). Pour cela utiliser l'appel système
signal().
Compilez votre code avec et sans l'option
-ansi, et comparez les comportements à
l'exécution. Que se passe-t-il ?
Exercice 4 - Highlander II
Réécrire le programme précédent avec l'appel système
sigaction(). Pour manipuler des
sigset_t,
consultez la manpage
sigsetops (il faudra utiliser au moins
sigemptyset()).
Exercice 5 - Bonus 1: speed-O-meter
Écrire un speed-o-meter, un programme qui mesure la vitesse à laquelle on lui envoie des données
(par l'entrée standard), en octets par seconde.
Exercice 6 - Bonus 2: shaper
Écrire un shaper, un programme qui lit sur l'entrée standard et écrit sur la sortie standard,
mais n'écrit pas plus vite qu'une certaine vitesse spécifiée en octets par seconde.
© Université de Marne-la-Vallée