#1 Le 26/05/2013, à 22:58
- Crone123
Récupérer un argument passé en "pipe"
Bonjour,
Je suis en train de développer un programme en C++, et j'aimerais pouvoir lui passer des arguments par les "pipe".
Exemple:
grep fichier mot | monprogramme
Mon programme peut prendre un texte ou un fichier comme argument (au choix), mais dans les 2 cas, si je lui passe un argument en pipe, ça ne fonctionne pas....
Je réceptionne tous les paramètres de argv dans des std::string avant de les traiter.
Mais dans les 2 cas, par un pipe il considère que je n'ai passé aucun paramètre...
Je trouve les pipe super pratiques, mais je n'ai en fait jamais codé de programme qui auraient eu besoin de les utiliser, donc, est-ce que quelqu'un pourrait m'expliquer comment faire?
Merci
Hors ligne
#2 Le 27/05/2013, à 07:41
- tiramiseb
Re : Récupérer un argument passé en "pipe"
Salut,
Avec un pipe il ne s'agit pas d'ajout d'argument, il s'agit de donner des informations sur l'entrée standard du programme, comme si tu tapais des choses au clavier. Il faut donc lire stdin pour avoir les données envoyées par l'intermédiaire d'un pipe.
PS : pour grep, c'est "grep mot fichier" et non "grep fichier mot"
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#3 Le 27/05/2013, à 19:42
- Crone123
Re : Récupérer un argument passé en "pipe"
Merci pour l'astuce pour grep.
Et donc, pour les pipe je dois lire l'entrée standard....mais j'utilise quoi? cin? cin risque de poser problème si l'utilisateur n'utilise pas de pipe...
Merci
Hors ligne
#4 Le 27/05/2013, à 19:50
- tiramiseb
Re : Récupérer un argument passé en "pipe"
Ah ben il faut gérer tous les cas, hein.
Je ne sais pas comment fonctionne ton programme, alors je ne peux pas te dire.
Tu peux notamment définir un argument qui dit de lire l'entrée standard plutôt qu'un fichier dont le nom serait donné en argument, par exemple...
Vu que tu n'expliques pas ce que c'est censé faire, on ne peut pas te dire ce qu'on en pense...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#5 Le 27/05/2013, à 19:55
- Crone123
Re : Récupérer un argument passé en "pipe"
En fait, mon programme interprète un fichier d'entrée (ou une ligne tapée en arguments), et l'affiche telle qu'il l'as interprété.
ça peut être des conversions de caractères, de mots, de balises, etc...
Je peux très bien faire: Si aucun argument n'est passé, lire l'entrée standard.
Par contre, que dois-je utiliser pour lire l'entrée standard? Comme je l'ai dit, "cin" attends une interaction de l'utilisateur qui est bloquante...
Merci
Hors ligne
#6 Le 28/05/2013, à 06:23
- tiramiseb
Re : Récupérer un argument passé en "pipe"
Comme je l'ai dit, "cin" attends une interaction de l'utilisateur qui est bloquante...
Tu as testé ?
Je ne suis pas fort du tout en C++, mais a priori n'importe quelle fonction qui lit l'entrée standard, dans n'importe quel langage, va lire le pipe à la place du clavier vu que le principe du pipe c'est justement de remplacer l'entrée utilisateur.
L'entrée standard du programme, ce n'est pas obligatoirement le clavier. C'est avec le pipe (et également avec "<") qu'on peut changer cette entrée standard.
Mais l'entrée standard, c'est pour donner du contenu.
Tu veux faire quoi précisément ?
Tu veux passer de manière automatique, dans un script, un argument à ton programme ?
Ou alors tu veux lui passer un contenu ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#7 Le 28/05/2013, à 21:39
- Crone123
Re : Récupérer un argument passé en "pipe"
En fait, je veux passer un contenu de la même façon que je ferais:
cat fichier | less
Je vais déjà essayer avec cin, je vous tiens au courant
Hors ligne