logo Homepage
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Passer des paramètres de C vers bash  (Lu 6093 fois)
haricot
Profil challenge

Classement : 3860/54254

Néophyte
*
Hors ligne Hors ligne
Messages: 4


Voir le profil
« le: 21 Septembre 2011 à 17:23:11 »

Bonjour,

je débute en programmation, notamment en C.Dans les scripts shell que j'écris pour les épreuves de programmation, je sais passer des variables en paramètres vers un programme en C, avec un classique " programme $var1 $var2 ".Il suffit ensuite de traiter les paramètres avec argv[].
Mais voilà, pour récupérer le résultat de mon programme en C dans mon script shell, j'écris ce résultat dans un fichier.Fichier accessible et donc ensuite traité par des commandes bash.
Donc ma question: y a il un moyen plus simple de passer des variables de C vers mon shell ?, variables "globales ??" accessibles pour le bash et le C ?

Merci
Journalisée
_o_
Relecteur

Profil challenge

Classement : 42/54254

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #1 le: 21 Septembre 2011 à 17:48:06 »

La question n'a pas grand chose à voir avec un passage de paramètre, en fait.

Si je comprends bien, depuis un script shell, tu appelles un exécutable (écrit en C, mais c'est accessoire), dont tu voudrais récupérer le résultat dans ton script appelant.

Je vais répondre pour bash : pour récupérer la sortie standard (i.e. ce que l'exécutable "écrit" à l'écran), on peut utiliser la syntaxe suivante :
Code:
resultat=$(/path/vers/lexecutable param1 param2)

Pour information, c'est équivalent à la syntaxe suivante, mais cette dernière est deprecated :
Code:
resultat=`/path/vers/lexecutable param1 param2`

Je passe pour l'instant (volontairement) sur la sortie d'erreur ou le code retour, car je n'ai pas l'impression que l'on soit prêt à les évoquer. Peut-être qu'un bon bouquin sur le shell pourrait aider ?
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
haricot
Profil challenge

Classement : 3860/54254

Néophyte
*
Hors ligne Hors ligne
Messages: 4


Voir le profil
« #2 le: 21 Septembre 2011 à 18:57:50 »

Oui, c'est bien ça: récupérer le résultat depuis mon script.
Un peu comme un fonction qui renverrait le résultat selon des paramètres, mais une fonction qui serait "main" si on parle C.
hmmm... j'ai l'impression de m'embrouiller un peu là ..., encore du chemin à faire  désolé si j'suis pas très clair.

Je passe 'param1' et 'param2' à l'éxécutable, dans celui-ci 'resultat' sera calculé en fonction de param1 & param2.Si 'resultat' s'affiche à l'écran, ok je le récupère avec "resultat=$(/path/vers/lexecutable param1 param2)".Mais si le calcul se fait sans affichage à l'écran, comment récupérer ce 'résultat' ?

Le moyen que j'ai trouvé, c'est de passer par un fichier intermédiaire  où j'écris mon 'resultat'.Mais bon, y a surement plus simple.
 
Sinon y a bien la solution du "tout en bash" ou "tout en C" ...
Journalisée
_o_
Relecteur

Profil challenge

Classement : 42/54254

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #3 le: 21 Septembre 2011 à 19:08:23 »

Mais si le calcul se fait sans affichage à l'écran, comment récupérer ce 'résultat' ?

En l'affichant à l'écran ?
Sérieusement, si tu utilises un exécutable qui ne vient pas de toi, il fournit son résultat sous une certaine forme (sortie standard, fichier, etc...) et tu dois te débrouiller avec. Mais si l'exécutable en question est écrit de ta main, le plus simple pour récupérer le résultat est la sortie standard.
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
haricot
Profil challenge

Classement : 3860/54254

Néophyte
*
Hors ligne Hors ligne
Messages: 4


Voir le profil
« #4 le: 21 Septembre 2011 à 20:12:09 »

Oui l'éxécutable est de moi, et oui je me complique la vie inutilement! Autant aller au plus simple.
Merci pour tes conseils _o_ 
Journalisée
_o_
Relecteur

Profil challenge

Classement : 42/54254

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #5 le: 22 Septembre 2011 à 08:35:48 »

Je voulais ajouter encore une petite chose. La sortie standard est le canal classique d'affichage des résultats (sous réserve que le résultat soit lisible par un être humain, bien entendu) sous Unix. Avec un avantage non négligeable, c'est qu'il te suffit, en shell, de "piper" les commandes entre elles pour transmettre le résultat de l'une d'elle en paramètre de la suivante.

Par exemple, la commande suivante ne fait que "connecter" l'entrée standard de wc avec la sortie standard de cURL :
Code:
curl http://google.fr | wc -l

Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
Pages: [1]
  Imprimer  
 
Aller à: