Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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" smile

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 smile

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...

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 smile

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 ?

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 smile

Hors ligne