Programme (comme grep) capable de lire depuis stdin

Programme (comme grep) capable de lire depuis stdin - C - Programmation

Marsh Posté le 27-08-2014 à 16:08:18    

Salut,
 
En termes de code, comment faire pour qu'un programme puisse, au choix, soit lire un nom de fichier:
 

Code :
  1. grep string my_file.txt


 
ou comprendre que ce qu'il recoit sur stdin remplace cet argument:
 

Code :
  1. cat my_file.txt | grep string


 
J'ai essayé de regarder la gestion des arguments dans le code source mais je m'y perd... je ne trouve pas de "STDIN" tout seul par exemple.
 
 
 
 :jap:

Reply

Marsh Posté le 27-08-2014 à 16:08:18   

Reply

Marsh Posté le 27-08-2014 à 16:11:03    

techniquement, ton entrée standard est lisible comme n'importe quel FILE*, donc je ne vois pas ce qui te pose un problème.
Si tu as un argument qui correspond à un nom de fichier, tu appelles ta fonction qui fait le traitement supposé en lui passant ton fichier ouvert sous forme de FILE*. Si l'argument est manquant ou si tu as un argument qui te dit explicitement de regarder l'entrée standard (comme pour vi - par exemple), tu envoies ton STDIN à ta fonction.


---------------
last.fm
Reply

Marsh Posté le 27-08-2014 à 18:38:43    

Okok je comprends, en fait l'astuce consiste a juste mettre le file_descriptor a STDIN par defaut si jamais le fichier n'est pas fourni...

Reply

Marsh Posté le 06-09-2014 à 10:08:52    

Bonjour
 
C'est exactement ça. Typiquement, ça pourrait être un truc du genre
 

Code :
  1. int main(int argc, char *argv[])
  2. {
  3.    FILE *fp;
  4.    if (argc > 1)
  5.        fp=fopen(argv[1], "r" );
  6.    else
  7.        fp=stdin;
  8.  
  9.    while (fgets(..., ..., fp) != NULL)
  10.        ...
  11.  
  12.     if (fp != stdin) fclose(fp);
  13. }


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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