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 :

Passage de variable entre C et le shell via la fonction systeme()


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Passage de variable entre C et le shell via la fonction systeme()
    Bonjour,
    Je voudrais faire passer une variable de mon programme C vers une commande shell auquelle je fais appel par le biais de la fonction systeme().
    en fait j'ai une variable numero qui est utilisé dans mon programme C et que je veux utiliser avec la commande echo du shell.
    voila l'appel
    systeme("echo 'at $numero' > /");
    Mon probleme est que je n'arrive pas à avoir la valeur de la variable numero issu de mon programme C.
    Est ce que quelqu'un peut m'aider.
    Je vous remercie d'avance.

  2. #2
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par dodzi
    Bonjour,
    Je voudrais faire passer une variable de mon programme C vers une commande shell auquelle je fais appel par le biais de la fonction systeme().
    en fait j'ai une variable numero qui est utilisé dans mon programme C et que je veux utiliser avec la commande echo du shell.
    voila l'appel
    systeme("echo 'at $numero' > /");
    Mon probleme est que je n'arrive pas à avoir la valeur de la variable numero issu de mon programme C.
    Est ce que quelqu'un peut m'aider.
    Je vous remercie d'avance.

    Si j'ai bien compris la question, la fonction systeme() n'est pas adaptée


    Programme shellvar.exe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	char VarProgC[]="toto";
    	printf("%s",VarProgC);  // Envoi de la variable vers la sortie standard "stdout"
    Script shell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var=$(shellvar.exe)  #-- Recuperation de la stdout dans var
    echo $var
    toto

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var=`./shellvar.exe` #-- Recuperation de la stdout dans var
    echo $var
    toto

  4. #4
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    attention à ne pas confondre : les .exe de windows n'ont aucun sens sous linux

    ce serait mieux de ne pas mettre de .exe pour éviter de venir dire "je comprends pas, photoshop.exe marche pas sous linux"

    il vaut mieux éviter d'utiliser system mais plutôt les fonctions execlp, execvp, etc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="http://man.developpez.com/man3/execlp.3.php" target="_blank">man exec</a>

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 534
    Points : 6 723
    Points
    6 723
    Par défaut
    en fait je me demande si l'erreur dedodzi n'est pas beaucoup plus simple que cela : on n'accède pas en shell à une variable d'un programme C ou autre via $ !

    il faut tout simplement construire la chaine de caracteres à passer à system en remplacant $numero par sa valeur via un sprintf ou autre

    Bruno

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dodzi
    Bonjour,
    Je voudrais faire passer une variable de mon programme C vers une commande shell auquelle je fais appel par le biais de la fonction systeme().
    en fait j'ai une variable numero qui est utilisé dans mon programme C et que je veux utiliser avec la commande echo du shell.
    voila l'appel
    systeme("echo 'at $numero' > /");
    Mon probleme est que je n'arrive pas à avoir la valeur de la variable numero issu de mon programme C.
    Est ce que quelqu'un peut m'aider.
    Je vous remercie d'avance.
    d'abord en C ce n'est pas systeme() mais system().

    Ensuite, il suffit dans le .c de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sprintf ( commande, "echo 'at %d", numero);
    statut = system(commande);

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 5
    Points
    5
    Par défaut c'est resolu! Merci
    C'est resolu avec la combinaison de sprintf avec system qu'un ami aussi m'a filé voici:

    sprintf(var,"echo \"at%s\" >/dev/ ",numero);
    system(var);

    Je vous remercie tous pour vos reponses

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    euh.... et tu imprimes un numéro (qui doit être un entier je suppose) avec un %s ???

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 38
    Points : 44
    Points
    44
    Par défaut Utilisation de putenv pour modifier l'environnement
    Une autre solution, modifier l'environnement du programme en cours d'exécution qui sera passé au shell, ce qui donne :


    Le programme C numero.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main (int argc, char **argv)
    {
      int numero = 10;
      char buf[100];
      snprintf(buf,sizeof(buf),"numero=%d",numero);
      putenv(buf);
      system("./numero.sh");
    }
    Le shell numero.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #! /bin/bash
    echo "numero = $numero"

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

Discussions similaires

  1. Passage de variable entre 2 pages
    Par lodan dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/07/2006, 11h38
  2. passage de variable entre jsp ?
    Par MAJIK_ENIS dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/04/2006, 11h54
  3. Réponses: 2
    Dernier message: 15/12/2005, 08h43
  4. [C#] Passage de variables entre 2 forms
    Par Tips dans le forum C#
    Réponses: 6
    Dernier message: 06/12/2005, 16h48
  5. [langage] Probleme passage de variables entre modules
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 13/08/2004, 12h25

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