Tristan Crolard - François Pottier
fopen
, fprintf
, fputc
, fgetc
, feof
, ferror
, fclose
(C standard); getopt
, optind
(POSIX.2).
La plupart des commandes UNIX se comportent par défaut comme des filtres (ces commandes lisent sur leur entrée standard et écrivent sur leur sortie standard). Ces commandes peuvent être composées grâce aux tubes (notés | en shell). L'élément neutre de cette composition est la commande cat que nous nous proposons de réécrire ici en utilisant les fonctions d'entrée-sortie de la librairie standard. Cette commande peut aussi recevoir un ou plusieurs noms de fichiers en paramètres: ce sont ces fichiers (et non plus l'entrée standard) qui sont alors copiés séquentiellement sur la sortie standard.
void catfile (FILE *stream);Cette fonction copiera le flot donné en paramètre (supposé ouvert en lecture) sur sa sortie standard. Toute erreur d'écriture sera considérée comme fatale. Une erreur de lecture provoquera uniquement le retour de la fonction.
int main (int argc, char *argv[]);Si aucun argument n'est fourni sur la ligne de commandes, cette fonction copiera son entrée standard sur sa sortie standard. Sinon, les fichiers nommés sur la ligne de commandes seront copiés. Une erreur d'ouverture, de lecture ou de fermeture de l'un de ces fichiers provoquera l'écriture d'un message approprié sur stderr, mais ne sera pas fatale.
num_flag
est vraie.
void usage (void);qui affiche le bon usage de votre commande (liste des options et des paramètres possibles) et termine.
num_flag
à vrai. Si toute autre
option est fournie, la fonction usage sera appelée. On utilisera pour cela la fonction POSIX.2 getopt,
dont l'en-tête est
int getopt (int argc, char * const argv[], const char *optstring);ainsi que la variable externe POSIX.2 optind (cf. le manuel en ligne).