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

C++ Discussion :

Programmation C++ sous Unix [Débutant(e)]


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 127
    Points : 56
    Points
    56
    Par défaut Programmation C++ sous Unix
    Bonjour,

    Je commence à programmer en C++ sous Ubuntu et j'ai un soucis, je voudrais lancer mon programme dans le terminal donc avec ./mon_programme et que ca ouvre une inputbox, puis sauver ma variable.

    Le soucis avec mon code c'est que la variable n'est pas sauver, pourriez vous m'aider ?

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <stdio.h>
    #include <stdlib.h>
     
    main(){
    	system("set var = `zenity --title 'Fenêtre passe' --entry --text 'Entrez votre mot de passe'`");
    	system("echo $var");
    	}

  2. #2
    Membre éprouvé
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Points : 1 081
    Points
    1 081
    Par défaut
    Je ne sais pas comment fonctionne Zenity & co mais dans tous les cas, si tu veux enregistrer l'output d'une commande bash il faut le faire de la manière suivante :

    $ var=`ls`
    $ echo $var
    Documents
    ...

    donc pour toi ça donnera :

    system("var=`zenity --title 'Fenêtre passe' --entry --text 'Entrez votre mot de passe'`");

    en gros il fallait retirer les espaces entre var, = et `


    sinon es-tu sûr que tu es bien en train de faire du C++ et non du C ?
    Si vous ne savez toujours pas ce qu’est la récursivité, relisez cette phrase.

    Mon blog sur la programmation et l'informatique !

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 127
    Points : 56
    Points
    56
    Par défaut
    Merci pour ta réponse, cela dit, les commandes unix fonctionne parfaitement une a une dans le terminale, la variable est bien sauvegarder.

    J'ai corrigé mon code mais il n'enregistre toujours pas la variable quand je lance le programme dans le terminal avec ./mon_programme.

    je ne comprends vraiment pas le problème car cela fonctionne si je met les commandes unix dans le terminal.

    Je pensais que le programme s'exécutait trop rapidement pour l'echo mais même avec un sleep cela ne fonctionne pas.

    Voici le nouveau code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
    #include <stdlib.h>
     
    main(){
        system("var=`zenity --title 'Fenêtre passe' --entry --text 'Entrez votre mot de passe'`");
        system("echo $var");
    }
    encore merci

    Edit : Je viens de tester en attribuant une variable et même ce code n'enregistre pas la variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
    #include <stdlib.h>
     
    main(){
        system("var=hercule");
        system("echo $var");
    }

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Euh...est-ce que par hasard la fonction system ne recréerait pas un environnement neuf à chaque appel, avec donc perte de ta variable d'environnement var?

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 127
    Points : 56
    Points
    56
    Par défaut
    Pas bête therwald, cependant la fonction system est le seul moyen que je connaisse pour pouvoir exécuté une commande unix dans le terminal par l'intermédiaire du programme.

    Comment puis-je récupérer ma variable alors ?

  6. #6
    Membre éprouvé
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Points : 1 081
    Points
    1 081
    Par défaut
    Oui en effet c'est normal : http://www.cplusplus.com/reference/c...stdlib/system/

    En gros, à chaque fois que la fonction system() se termine, toutes les variables créées sont effacées, actuellement si on schematisait ton code, c'est comme si tu ouvrais un terminal, que tu tapais : var=`zenity --title 'Fenêtre passe' --entry --text 'Entrez votre mot de passe'` ensuite tu le fermais, tu le re-ouvrais et tu tapais : echo $var. Les variables créées de la sorte sont uniques à la session courante.

    A présent, si tu veux afficher la sortie de ta commande, il faut que tu fasses :

    system("var=`zenity --title 'Fenêtre passe' --entry --text 'Entrez votre mot de passe'` && echo $var");

    Après pour récupérer le contenu de ta variable, ça serait pas aussi facile puisque system() renvoie un int (dont la valeur dépend de l'OS) et non l'output des commandes entrées à l'intérieur.
    Si vous ne savez toujours pas ce qu’est la récursivité, relisez cette phrase.

    Mon blog sur la programmation et l'informatique !

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 127
    Points : 56
    Points
    56
    Par défaut
    Merci pour votre aide rapide, je vais tenté de me débrouillé avec ca !

    Votre aide fut rapide

    Et bonne année !

  8. #8
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    pourquoi le fais tu en C/C++ plutot qu'en bash ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Ou même, quitte à utiliser zenity, autant juste faire un script shell.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Etudiant57 Voir le message
    Pas bête therwald, cependant la fonction system est le seul moyen que je connaisse pour pouvoir exécuté une commande unix dans le terminal par l'intermédiaire du programme.

    Comment puis-je récupérer ma variable alors ?
    En faisant différemment.

    popen est probablement ton ami dans ce cas, puisque tu peux faire

    1/ FILE *f = popen("zenity...")
    2/ read(f,...)
    3/ fclose(f)
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 127
    Points : 56
    Points
    56
    Par défaut
    Voila j'ai avancé dans mon programme, j'arrive à stocker ma variable dans un fichier .temp.

    Maintenant j'aimerai stocker ce que contient le fichier .temp dans une variable en C. Pourriez-vous m'aider à nouveau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
     
    //Fonction erreur//
    void erreur (char *s)		
    			{	fprintf(stderr,"%s\n",s);
    				exit(1);
    			}
     
     
    main(){
    	char mdp[BUFSIZ];		
    	FILE *fp = popen("var=`zenity --title 'Fenêtre passe' --entry --text 'Entrez votre mot de passe'` && echo $var > mdp.temp","r");
    	}

  12. #12
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Citation Envoyé par Etudiant57 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	FILE *fp = popen("var=`zenity --title 'Fenêtre passe' --entry --text 'Entrez votre mot de passe'` && echo $var > mdp.temp","r");
    Euh...l'intérêt du popen est d'accéder à la sortie de ton process, donc pas besoin à priori de ta variable et de ton fichier mdp.temp. Tu lis directement du flux vers ton buffer. C'est tout l'intérêt d'utiliser popen pour lancer zenity.
    Quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char buffer[256];
    FILE *fp = popen("zenity --title 'Fenêtre passe' --entry --text 'Entrez votre mot de passe'","r");
    fgets(buffer,256,fp);
    pclose(fp);

Discussions similaires

  1. programmation c sous unix HELP ME PLEASE
    Par tousa dans le forum Réseau
    Réponses: 2
    Dernier message: 28/03/2010, 23h57
  2. programmation c sous unix , les files de messages
    Par élève_ingénieur dans le forum Linux
    Réponses: 4
    Dernier message: 07/12/2009, 22h43
  3. modification de programme .pc sous unix
    Par gege87270 dans le forum Shell et commandes GNU
    Réponses: 33
    Dernier message: 01/10/2007, 08h50
  4. Programmation systeme sous Unix
    Par Premium dans le forum Linux
    Réponses: 9
    Dernier message: 11/03/2006, 09h40

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