IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[Bash]Ecrire sur stdin de manière à communiquer avec un programme


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 17
    Points
    17
    Par défaut [Bash]Ecrire sur stdin de manière à communiquer avec un programme
    Bonjour à tous,

    je cherche à faire communiquer un script bash et un programme C.

    Le programme C attend, dans une boucle infinie, l'entrée d'une commande sur stdin ('q\n' pour quitter par exemple).

    Je cherche donc à utiliser mon programme bash pour déclencher les commandes sur Stdin. (Le bash me sert de "ui", puisqu'il remplit automatiquement les arguments de l'appel de mon programme en fonction des choix de l'utilisateur).

    Cependant, au moment de quitter le programme c, j'ai plusieurs problèmes :

    - echo 'q' >& 0 (qui est sensé écrire sur stdin) m'affiche q, et ne mets rien dans le flux que vérifie le programme C
    - en utilisant un fichier tampon, je peux déclencher les commandes, mais à chaque itération de la boucle, il considère qu'une commande a été entrée (ce qui génère des traces, et n'est pas idéal pour la vitesse d'exécution)

    Quelqu'un a une idée pour rediriger 'q\n' sur stdin en bash et être lu ensuite ensuite par le programme C (en tache de fond ) ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 949
    Points : 4 372
    Points
    4 372
    Par défaut
    Citation Envoyé par Museum Voir le message

    - echo 'q' >& 0 (qui est sensé écrire sur stdin) m'affiche q, et ne mets rien dans le flux que vérifie le programme C
    - en utilisant un fichier tampon, je peux déclencher les commandes, mais à chaque itération de la boucle, il considère qu'une commande a été entrée (ce qui génère des traces, et n'est pas idéal pour la vitesse d'exécution)

    Quelqu'un a une idée pour rediriger 'q\n' sur stdin en bash et être lu ensuite ensuite par le programme C (en tache de fond ) ?
    echo 'q' écrit sur stdout du process bash courant… pas sur le stdin du programme en tâche de fond…

    regardez:
    man mkfifo

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup.

    Cette commande correspond parfaitement à mes besoins (c'est un peu déroutant au début, car elle absorbe stdout jusqu'à la fin du programme qui y fait appel, mais bon, je peux vivre avec ca )


    Corrigez moi si je me trompes dans l'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (Dans le répertoire .)
     
    mkfifo fifoName
    ./progC < fifoName
    echo commande > fifoName

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 949
    Points : 4 372
    Points
    4 372
    Par défaut
    Citation Envoyé par Museum Voir le message
    Merci beaucoup.

    Cette commande correspond parfaitement à mes besoins (c'est un peu déroutant au début, car elle absorbe stdout jusqu'à la fin du programme qui y fait appel, mais bon, je peux vivre avec ca )


    Corrigez moi si je me trompes dans l'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (Dans le répertoire .)
     
    mkfifo fifoName
    ./progC < fifoName
    echo commande > fifoName
    a priori, je ferais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tail -f fifoName | ./progC &

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment ecrire sur la meme ligne avec la commane ECHO
    Par juflata dans le forum Windows
    Réponses: 3
    Dernier message: 24/11/2015, 09h06
  2. Réponses: 0
    Dernier message: 27/12/2012, 17h52
  3. communiquer avec une base de données sur internet
    Par richard038 dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/02/2006, 18h01
  4. ecrire sur une feuille excel avec Asp
    Par Ajay dans le forum ASP
    Réponses: 7
    Dernier message: 06/01/2006, 23h18
  5. Réponses: 7
    Dernier message: 27/09/2005, 10h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo