:: Enseignements :: ESIPE :: E3INFO :: 2010-2011 :: Programmation C ::
[LOGO]

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.