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 :

Apprendre à utiliser la fonction system [Tutoriel]


Sujet :

C++

  1. #1
    Membre expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Points : 3 892
    Points
    3 892
    Par défaut Apprendre à utiliser la fonction system
    Mohamed Ahmed (snack3r) vous propose son premier tutoriel sur l'utilisation de la fonction system(), ainsi que les dangers que celle-ci comporte avec son article Apprendre à utiliser la fonction system .

    Le lien de l'article : http://ahmed-mohamed.developpez.com/...nction-system/

    Profitez de cette discussion pour faire part de vos remarques, commentaires ou d'éventuelles informations ou techniques complémentaires .

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    CLEAR n'existe pas sous GNU/Linux, c'est clear.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::cout << "Appuyer sur une touche pour continuer ..." << std::endl;
    std::cin.ignore(std::numeric_limits<int>::max(), '\n');
    N'attends pas ce qui est demandé, il faut appuyer sur la touche entrée.

    J'ai arrêté de lire là mais j'ai l'impression qui faut renommer l'article «Apprendre à utiliser la fonction system sous Windows».

  3. #3
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    Bonjour,

    CLEAR n'existe pas sous GNU/Linux, c'est clear.
    vous avez raison, je l'ai modifié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::cout << "Appuyer sur une touche pour continuer ..." << std::endl;
    std::cin.ignore(std::numeric_limits<int>::max(), '\n');
    N'attends pas ce qui est demandé, il faut appuyer sur la touche entrée.
    La vraie simulation de system("pause") se fait avec getch() mais comme cette dernière est deprecated et je pense que son alternative est toujours plus ou moins non portable car on peut utiliser ncurses sous linux ou PDCurses sous Windows.
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

  4. #4
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Je me répète
    Donc, ce n'est pas équivalent.
    Il faudrait remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cout << "Appuyer sur une touche pour continuer ..." << std::endl;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cout << "Appuyer sur la touche «Entrée» pour continuer ..." << std::endl;
    (et aussi changer l'explication de ce code C++ dans l'article.)

    Au passage, PDcurses est portable.

  5. #5
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    c'est fait.
    merci pour vos remarques pertinentes
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

  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 519
    Points
    41 519
    Par défaut
    getch() est deprecated? Je sais qu'elle est non-standard, mais il me semblait qu'elle s'appelait getch() dans pratiquement toutes les bibliothèques qui l'implémentent...
    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 averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    Bonjour Médinoc,

    Je parle de la fonction getch() qui se trouve dans le fichier d’en-tête conio.h, on peut tout à fait dire qu'elle est obsolète, parce que le header file lui même est deprecated au plus haut degré, il n'est pas décrit dans le livre The C Programming Language et il ne fait pas partie de la bibliothèque standard et je pense bien qu'il n'est pas aussi défini dans POSIX.
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

  8. #8
    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 519
    Points
    41 519
    Par défaut
    À ma connaissance, <conio.h> n'est pas deprecated non plus, seulement non-standard, et son seul crime est de correspondre à une plate-forme aujourd'hui inusitée (DOS).

    Et dans la version de la CRT Microsoft*, seul le nom getch est déprécié (au profit de _getch) avec un message incorrect qui prétend erronément que la fonction à quelque chose à voir avec le standard POSIX.

    En gros, dire que <conio.h> est déprécié équivaudrait à dire que <unistd.h> l'est simplement parce qu'il n'est pas supporté sous Windows.

    *Cette version passe la console en mode Raw, fait des ReadConsoleInput() en boucle jusqu'à ce que l'entrée en question soit une touche, puis restaure l'ancien mode de la console
    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.

  9. #9
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    À ma connaissance, <conio.h> n'est pas deprecated non plus, seulement non-standard, et son seul crime est de correspondre à une plate-forme aujourd'hui inusitée (DOS).

    Et dans la version de la CRT Microsoft*, seul le nom getch est déprécié (au profit de _getch) avec un message incorrect qui prétend erronément que la fonction à quelque chose à voir avec le standard POSIX.

    En gros, dire que <conio.h> est déprécié équivaudrait à dire que <unistd.h> l'est simplement parce qu'il n'est pas supporté sous Windows.

    *Cette version passe la console en mode Raw, fait des ReadConsoleInput() en boucle jusqu'à ce que l'entrée en question soit une touche, puis restaure l'ancien mode de la console
    Il y a un getch dans POSIX (dans curses plus precisement). Je doute qu'il ait quelquechose a voir sauf dans les grandes lignes avec le getch de DOS (de memoire il est bloquant ou non suivant la maniere dont curses est initialise, il a un echo ou non, il interprete les sequences d'echappement pour les presenter sous forme unifee quelque soit celles qu'envoie le terminal)

    (En passant, l'interet de system c'est d'acceder a l'interpreteur de commande de la machine, la possibilite d'avoir des commandes communes est quand meme tres restreinte)
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  10. #10
    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 519
    Points
    41 519
    Par défaut
    Ah, j'ignorais que curses faisait partie du standard POSIX (ou du moins, elle fait partie de la Single UNIX Specification), je croyais que c'était une bibliothèque externe.

    Il y a en effet des différences notables: Sous conio, l'écho n'est pas contrôlé par un paramètre global, mais par le choix de la fonction utilisé (getche() au lieu de getch()).
    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.

  11. #11
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    @Médinoc
    d'après la FAQ, on dit que conio.h n'ayant jamais été normalisé par un quelconque organisme, son contenu varie suivant le compilateur. De plus, la plupart de ces fonctions sont de nos jours obsolètes.
    Je pense qu'il est rarement utilisé ces jours là c'est pour j'ai dit qu'il est deprecated.

    @Jean-Marc.Bourguet
    merci pour l'information.
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

  12. #12
    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 519
    Points
    41 519
    Par défaut
    Dans ce cas, tu peux dire "déconseillé". "deprecated" est un terme plus lourd de sens.
    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.

  13. #13
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    Ok, c'est donc déconseillé
    en fait, j'ai pas dit dans l'article que conio.h est deprecated, j'ai seulement dit qu'il n'est pas portable.
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

  14. #14
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 64
    Points : 47
    Points
    47
    Par défaut
    Bonjour à tous

    Comment lancer un system("netsh") en mode administrateur ?

    en étant connecté sur un compte utilisateur.

    merci

  15. #15
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    Bonjour,

    À partir de Vista et pour des raisons de sécurité, Windows ne permet plus d'exécuter des tâches système non authentifiées. Si ton programme requiert des droits d'administrateur et tu travailles par exemple sous VC++, tu sélectionnes le dossier de ton projet et tu cliques sur le bouton droit de souris en choisissant Add puis New item et tu crées un fichier nommé my.manifest. écrase son contenu et ajoute ceci :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity version="1.0.0.0"
         processorArchitecture="X86"
         name="IsUserAdmin"
         type="win32"/>
      <description>This is my application</description>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
          </requestedPrivileges>
        </security>
      </trustInfo>
    </assembly>
    puis, dans la liste de Project tu choisis la dernière option XXXX properties. Depuis Configuration Properties tu prends Manifest Tool puis Input and Output et dans la zone de texte de Additional manifest files écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(InputDir)\my.manifest
    maintenant, fait un build de ton projet (peut être tu peut trouver certaines erreurs mais tu peux les ignorer). va dans le chemin de ton exe et normalement tu va remarquer qu'une petite icône est là-dessus de ton exécutable.
    durant l'exécution de ton exe, la fenêtre suivante s'ouvre :



    parce que ton programme est non reconnu par le système mais lors du clique sur Yes, ton exe va s'exécuter avec les privilèges du root.
    Images attachées Images attachées  
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

  16. #16
    Membre habitué
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    Merci pour le tuto.

    << endl << "1 - Arreter l'ordinateur." << endl
    << endl << "2 - Redermarrer l'ordinateur." << endl
    << endl << "3 - Fermer la session." << endl
    << endl << "1 - Quitter le programme." << endl;
    case '1':system("SHUTDOWN /S /T 00");
    case '2':system("SHUTDOWN /R /T 00");
    case '3':system("SHUTDOWN /L");
    case '4':system("EXIT");

  17. #17
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    @kripteks
    Merci, c'est modifié.
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Concernant ce changement de nom et son lien avec POSIX, voici un lien intéressant.

  19. #19
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    Bonjour oodini,

    si je ne me trompe pas, getcwd() permet d'obtenir le répertoire de travail courant.
    mais je n'ai pas parlé de cette fonction dans l'article, quelle est la relation donc entre getcwd() et la fonction system ?


    merci pour le lien.
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

Discussions similaires

  1. utiliser la fonction system()
    Par emprex dans le forum Débuter
    Réponses: 12
    Dernier message: 26/03/2010, 20h45
  2. utilisation de la fonction system
    Par El Leon dans le forum C
    Réponses: 12
    Dernier message: 04/08/2008, 21h26
  3. [Système] Utilisation de la fonction system
    Par ouss dans le forum Langage
    Réponses: 6
    Dernier message: 30/10/2006, 14h16

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