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 :

system("pause") ?


Sujet :

C

  1. #1
    Membre émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut system("pause") ?
    Bonjour,

    Peut-on faire un system("pause") sous Unix ? Je sais que ça fonctionne sous Windows (Dev).
    Mais l'équivalence sous Unix, quelle est-elle ?

  2. #2
    Expert éminent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 380
    Billets dans le blog
    1
    Par défaut
    system("pause") ne fonctionne pas sous Unix.

    Si on suppose que le système fonctionne sous un shell Posix ou sur Bash (tous les linux déjà), on peut faire system("read") pour obtenir un effet similaire.

    Problème: "read" n'est pas reconnu par le shell C (shell par défaut de FreeBSD par exemple).

    Cependant, d'après la page man sous Linux, system() appelle /bin/sh, donc un shell Bourne a priori... Donc ça me paraît être une bonne supposition que system("read") fonctionnera dans 99% des cas sous Unix, sans que je puisse cependant te le certifier.

    Néanmoins, je pense que le system("pause") (qui sert à éviter la fermeture prématurée de la fenêtre sous Windows) n'est qu'une solution de facilité. Il vaudrait mieux coder soi-même la fonction en lisant getchar() jusqu'à EOF ou \n.

  3. #3
    Membre Expert

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Par défaut
    Hello

    Encore plus simple : il suffit de faire un fgets de l'entree standard...

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,
    Citation Envoyé par Anomaly
    Problème: "read" n'est pas reconnu par le shell C
    Voici une méthode portable en deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    puts ("Appuyez sur [enter] pour quitter...\n");
    getchar ();

  5. #5
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Voici une méthode portable en deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    puts ("Appuyez sur [enter] pour quitter...\n");
    getchar ();
    C'est portable mais dangereux dans le sens où le programme attend la touche entrée...

    Si tu tapes "bonjour" et tu tapes entrée, getchar va prendre le b et attendre il restera onjour pour un get/scanf ulterieur...

    Pas forcèment génial...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            printf("Pause!!!!\n");
            //on attend un '\n'
            while(getchar()!=(int) '\n')
                    ;
    Me semble mieux....
    Biensûr si c'est juste pour garder la fenêtre ouverte, c'est une autre discussion, ta solution suffit...
    Jc

  6. #6
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Quelle est l'utilité de faire un system("pause") sous Unix? Je ne l'utilise que parce que je suis sous Dev-Cpp...

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    system("pause") ne fonctionne pas sous Unix.

  8. #8
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    dsl.... 'ai rien dit

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Si, tu as dis quelque chose: Tu as demandé quelle était l'utilité d'attendre la pression d'une touche (ou de enter) avant de terminer le programme, sous Unix.
    Et j'appuie ta question : Est-ce que les terminaux se ferment automatiquement sous Unix comme en Win32 console ? (Enfin, ça doit dépendre du WindowManager... On va dire... Sur KDE et WindowMaker ?)
    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 émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut
    Merci pour ces infos !!

  11. #11
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Est-ce que les terminaux se ferment automatiquement sous Unix comme en Win32 console ? (Enfin, ça doit dépendre du WindowManager... On va dire... Sur KDE et WindowMaker ?)
    Sous linux si tu lances un programme que console a partir de l'interface graphique, aucun terminal ne s'ouvre... Si tu mets en place un systeme de lecture de l'entree standard, ton programme ne recevra rien du tout puisqu'il ne recuperera jamais ce que l'utilisateur a taper... Mettre un getchar provoque donc un programme qui boucle, il faudra faire un kill pour le terminer...

    Si tu es dans un terminal, c'est comme sous windows, le programme se termine et la fenetre ne se ferme pas...

    Lorsque je programmais sous windows (ca fait longtemps), il y avait une option sous VC (et je crois dev) qui permettait de dire "ne ferme pas la fenetre lorsque le programme est lance"... Encore mieux, ouvrez simplement une invite de commande et allez dans le repertoire ou se trouve votre programme, en executant le programme a partir de la, vous n'aurez plus ce probleme de fenetre qui se ferme...

    Je laisse aux experts de Linux et Windows faire les precisions necessaires...
    Jc

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Merci.

    En fait, je pensais surtout aux fonctions comme la case à cocher "open in terminal" des raccourcis proposés par KDE...

    Pour WindowMaker, j'ai ma réponse: Un des raccourcis du menu permet de lancer "top" dans un xterm; quand on quitte top, le terminal se ferme.
    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.

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

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