Arguments en ligne de commande

Arguments en ligne de commande - C - Programmation

Marsh Posté le 16-08-2006 à 13:40:07    

Bonjour,
 
j'ai écrit une fonction copy :int copy(FILE *src, FILE *dst)
qui permet de copier le contenu d'un fichier dans un autre
Par exemple, si je tape :

Code :
  1. $ ./a.out source destination


Le programme me copie le contenu de source dans destination
mon main est donc le suivant (sans la gestion des erreurs) dans le cas ou il y a 2 arguments.  

Code :
  1. int main(int argc, char *argv[])
  2. {
  3.   FILE *fileIn, *fileOut;
  4.   if(argc != 3)
  5.    /*gestion erreur*/
  6.   fileIn = fopen(argv[1], "r" );
  7.   fileOut = fopen(argv[2], "w" );
  8.   copy(fileIn, fileOut);
  9.   return EXIT_SUCCESS;
  10. }


 
Je voudrais savoir comment modifier le main pour que le le contenu du fichier source soit afficher à l'écran lorsqu'il n'y a qu'un parametre :

Code :
  1. $ ./a.out source


et qu'il y ait copie lorsqu'il y a 2 parametres :

Code :
  1. $ ./a.out source destination


 
Merci

Reply

Marsh Posté le 16-08-2006 à 13:40:07   

Reply

Marsh Posté le 16-08-2006 à 14:04:53    

Pour moi si tu ne précise qu'un seul paramètre alors le second devient :
stdout (pointeur sur la sortie standard) ...

Reply

Marsh Posté le 16-08-2006 à 14:11:58    

Par exemple, tu comptes les paramètres ?

Reply

Marsh Posté le 16-08-2006 à 14:14:40    

jbourdellon a écrit :

Pour moi si tu ne précise qu'un seul paramètre alors le second devient :
stdout (pointeur sur la sortie standard) ...


C'est comme ça que ça se passe ?
 

Code :
  1. int main(int argc, char *argv[])
  2. {
  3.   FILE *fileIn, *fileOut;
  4.   switch(argc){ 
  5.    case 2 :
  6.     fileIn = fopen(argv[1], "r" );
  7.     fileOut = stdout;
  8.     copy(fileIn, fileOut);
  9.     break;
  10.    case 3 :
  11.     fileIn = fopen(argv[1], "r" );
  12.     fileOut = fopen(argv[2], "w" );
  13.     copy(fileIn, fileOut);
  14.     break;
  15.    default :
  16.    fprintf(stderr,"erreur nombre parametres incorrects\n" );
  17.    return EXIT_FAILURE;
  18. }
  19.   return EXIT_SUCCESS;
  20. }

Reply

Marsh Posté le 16-08-2006 à 14:19:06    

t'as essayé ?

Reply

Marsh Posté le 16-08-2006 à 14:19:08    

Oui ca me semble correct mais bon j'ai pas moyen de tester la, donc ...

Reply

Marsh Posté le 16-08-2006 à 14:19:17    

(mais oui, c'est dans l'idée)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed