:: Enseignements :: ESIPE :: EISC1 :: OC1 - 2011-2012 :: Programmation C ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Fichiers et gestion des options |
Dans ce TD, nous reprenons les ensembles vus précédemment pour leur ajouter
des fonctions d'E/S. Nous voyons aussi comment utiliser
getopt_long.
Exercice 1 - Fichiers binaires
La représentation d'ensemble par tableau d'octets se prête fort bien à des E/S binaires utilisant
fwrite et
fread. Écrire les fonctions suivantes:
-
int sauver_ensemble(unsigned char* e,char* nom_fichier): effectue la sauvegarde de l'ensemble
donné dans un fichier portant le nom indiqué. Attention à bien tester tous les cas d'erreurs.
-
unsigned char* charger_ensemble(char* nom_fichier): effectue la lecture de l'ensemble
contenu dans un fichier portant le nom indiqué et retourne cet ensemble, ou NULL en cas
de problème.
Exercice 2 - Fichiers texte
Cette fois-ci, nous voulons un format de fichier texte dans lequel les éléments sont stockés
en représentation décimale, sans ordre précis, séparés par des espaces, tabulations et/ou retours à
la ligne. Écrire les fonctions suivantes:
-
int sauver_ensemble2(unsigned char* e,FILE* fichier): effectue la sauvegarde de l'ensemble
donné dans le fichier donné, supposé avoir été ouvert correctement. Attention à bien
tester tous les cas d'erreurs.
-
unsigned char* charger_ensemble2(FILE* fichier): effectue la lecture de l'ensemble
contenu dans le fichier donné et retourne cet ensemble, ou NULL en cas de problème.
La fonction affichera un avertissement sur la sortie d'erreur en cas de doublons.
Exercice 3 - Tri
La construction et l'affichage d'un ensemble produit en sortie une suite triée. On veut tirer
partie de cela pour écrire un programme capable de trier des nombres entiers compris entre 0
et N, N étant le plus grand nombre pouvant être représenté dans ensemble codé par un tableau
de MAX octets (au fait, N vaut combien ?).
Écrire une première version de ce programme qui lit les nombres à trier sur l'entrée standard
et qui écrit le résultat sur la sortie standard.
Écrire une seconde version de ce programme qui utilise
getopt_long de la façon suivante:
-
Si l'on utilise l'option -i xxx ou --input xxx, les nombres sont lus sur le fichier xxx. Par
défaut, ils sont toujours lus sur l'entrée standard.
-
Si l'on utilise l'option -o yyy ou --output yyy, les nombres triés sont écrits dans le fichier yyy.
Par défaut, ils sont toujours écrits sur la sortie standard.
Ajouter une option -n/--no_warning avec laquelle le programme n'émet plus de warning
en cas de doublons.
© Université de Marne-la-Vallée