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 :

utiliser la fonction system()


Sujet :

C++

  1. #1
    Membre habitué Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Points : 199
    Points
    199
    Par défaut utiliser la fonction system()
    Bonsoir a tous,

    J ai un petit soucis pour utiliser la fonction system();

    premier code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <iostream>
    using namespace std;
    int main(void){
        cout << "test" << endl;
        return 0;
    }
    Que je compile comme ca :
    g++ -Wall -c test.cpp
    g++ test.o -o test

    ensuite je creer le deuxieme code dans le meme repertoire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <cstdlib> // declare "system()"
    using namespace std;
     
    int main(void){
    	system("test");
            return 0;
    }
    que je compile de la meme maniere :
    g++ -Wall -c calltest.cpp
    g++ calltest.o -o calltest

    et la j'obtient le message :

    sh: test: not found
    emprex@emprex-laptop:~/programing/cpp$

    Quel est le probleme ? merci beaucoup pour votre aide

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    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 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    • cout << "test" << endl; affiche test
    • system("test"); exécute test

    que pensiez-vous que faisait system ?

    faites donc man system pour avoir des informations sur system
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre habitué Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Points : 199
    Points
    199
    Par défaut
    Bonjour,

    Et bien system() appelle le programme test et devrait donc l'afficher or lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    emprex@emprex-laptop:~$ cd programing/cpp/
    emprex@emprex-laptop:~/programing/cpp$ g++ -Wall -c test.cpp
    emprex@emprex-laptop:~/programing/cpp$ g++ test.o -o test
    emprex@emprex-laptop:~/programing/cpp$ g++ -Wall -c calltest.cpp
    emprex@emprex-laptop:~/programing/cpp$ g++ calltest.o -o calltest
    emprex@emprex-laptop:~/programing/cpp$ ./calltest
    emprex@emprex-laptop:~/programing/cpp$ ./test
    test
    emprex@emprex-laptop:~/programing/cpp$ ./calltest
    emprex@emprex-laptop:~/programing/cpp$
    le resultat ne s'affiche pas. Je note cependant que n ai plus le message d'erreur.

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    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 533
    Points : 6 709
    Points
    6 709
    Par défaut
    ok, c'était pour être certains que vous vouliez bien exécuter test

    vous avez l'erreur sh: test: not found parce que la variable d'environement PATH ne contient pas "." (ou ~/programing/cpp) et donc votre commande ne peut être trouvée, c'est à priori la même raison qui fait que vous l'exécutez manuellement par ./test et non simplement par test

    vous risquez cependant un autre problème : test est une commande interne aux shells, pour éviter la confusion vous devriez renommer test en autre chose
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Membre habitué Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Points : 199
    Points
    199
    Par défaut
    Merci beaucoup pour votre reponse. PATH=$PATH:.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Citation Envoyé par emprex Voir le message
    Merci beaucoup pour votre reponse. PATH=$PATH:.
    Ça, c'est généralement déconseillé. Mais si tu es l'unique propriétaire de ton ordinateur, tu peux sans doute le faire sans céder à la paranoïa.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre habitué Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Points : 199
    Points
    199
    Par défaut
    Je suis l'unique utilisateur. En toute securite que faut-il faire alors?

  8. #8
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    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 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    Citation Envoyé par Médinoc Voir le message
    Ça, c'est généralement déconseillé. Mais si tu es l'unique propriétaire de ton ordinateur, tu peux sans doute le faire sans céder à la paranoïa.
    je ne comprends pas la remarque, cette modif est 'personnelle' faite via son propre '.bashrc' ou équivalent, il est également possible de le faire dans le programme lui même ou un script qui lance la chose au besoin. AUcun impact donc sur les autres utilisateurs (chacun ayant bien-sûr un compte propre)

    par exemple sous Linux Bouml est lancé via un script qui positionne PATH afin de pouvoir lancer les plug-outs par un system(), bien évidemment l'ajout dans PATH est fait en-tête
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Explication pour bruno_pages: Si tu visites le moindre répertoire où quelqu'un d'autre que toi possède les droits d'écriture (genre, un répertoire partagé), taper "ls" ou même "cd" en ayant "." dans le $PATH est une mauvaise idée.

    @emprex: En toute sécurité, je te conseillerais de suivre le conseil initial de bruno_pages: system("./test");.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre habitué Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Points : 199
    Points
    199
    Par défaut
    Merci Medinoc

    Cela dit ja vais cru comprendre qu'il etait risque de le faire dans ce sens uniquement

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ah, je n'avais pas vu la subtilité.

    Mais je n'en suis pas sûr: Ça peut peut-être marcher pour ls, mais à mon avis, ça ne protègera pas contre un faux cd/chdir.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre habitué Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Points : 199
    Points
    199
    Par défaut
    De toute maniere la securite sous unix n'est pas ma priorite et je vais me contenter, pour l'instant, du system("./nomduprog"); puisque ca marche tres bien et qu'il ne s'agit que deux caracteres en plus. Je ne suis pas encore assez faignant ou assez bon pour ne pas vouloir les taper. Merci a vous deux.

    ps: Je n'utilse pas windows mais j imagine qu'un tel code n'est pas portable et que par la suite il faudra bien en passer par la modification du PATH ?

  13. #13
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    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 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Citation Envoyé par emprex Voir le message
    ps: Je n'utilise pas windows mais j imagine qu'un tel code n'est pas portable et que par la suite il faudra bien en passer par la modification du PATH ?
    sous Windows je n'ai pas eu à modifier PATH pour Bouml, mais le raccourcis/icône positionne le répertoire courant pour que l'exécution se fasse dans le répertoire d'installation où se trouvent tout les exécutables. Cela veut dire soit que "." est toujours présent dans PATH, soit qu'il est implicite (désolé mais là je suis sous Linux et je ne peut pas vérifier ). Par contre les exécutions devant se faire en tâche de fond je ne peux pas comme sous Linux utiliser system("cmd &") mais j'utilise _spawnvp(_P_DETACH, ...)
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

Discussions similaires

  1. Apprendre à utiliser la fonction system
    Par germinolegrand dans le forum C++
    Réponses: 18
    Dernier message: 15/11/2013, 02h55
  2. utilisation de la fonction system
    Par El Leon dans le forum C
    Réponses: 12
    Dernier message: 04/08/2008, 22h26
  3. [Système] Utilisation de la fonction system
    Par ouss dans le forum Langage
    Réponses: 6
    Dernier message: 30/10/2006, 15h16

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