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 :

la fonction system()


Sujet :

C

  1. #1
    Membre confirmé Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut la fonction system()
    bonsoir

    j'ai besoin d'aide svp :

    voilà si on voudrait au cours d'un programme à un moment donné exécuter un fichier avec la fonction system(), que doit-t-on mettre entre les parenthèses
    c à dire quelle commande permet de faire ça ?

    merci infiniment d'avance

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Ça dépend du type de fichier.

    En général, on peut se débrouiller avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("/chemin/vers/l'appli fichier");
    Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("\"c:\\Program Files\\Microsoft Office\\Office12\\WINWORD.EXE\" fichier.doc");

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Tout ce que tu peux taper dans le shell (xterm ou konsole sous Linux, command.exe sous DOS, cmd.exe sous Windows, etc.), tu peux la placer en argument de la fonction system. La commande sera exécutée comme si elle avait été tapée dans le shell. Pour d'amples informations, je t'invite à consulter la FAQ.

  4. #4
    Membre confirmé Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut
    j'ai fait ça mais la console se bloque et ne passe pas à l'instruction qui suit system()

    ou il est le problème ??

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par fred_sell Voir le message
    j'ai fait ça mais la console se bloque et ne passe pas à l'instruction qui suit system()

    ou il est le problème ??
    La fonction system attend que la commande appelée rende la main.

    Pour résoudre la problème, il suffit de modifier la commande passée à system pour exécuter la commande en arrière plan.

    Il suffit souvent d'ajouter "&" à la fin de la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* bloquant */
    system("notepad");
     
    /* non bloquant */
    system("notepad &");

  6. #6
    Membre confirmé Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut
    non ça n'a pas marché !!

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par fred_sell Voir le message
    non ça n'a pas marché !!
    Peux tu nous donner un bout de ton code qui ne fonctionne pas comme tu veux ?

  8. #8
    Membre confirmé Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut
    non je vais vous donner tout le code :

    le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main()
    {
        system("\"C:\\app.exe\"");
        return 0;
    }
    c'est un petit programme comme "bonjour" qui quand il est exécuté il lance une autre application : C:\app.exe

    c'est tout !!

    alors??

  9. #9
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Mais app.exe est quand même lancé ?

  10. #10
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Ne met pas de guillemets autour de ta chaine :

  11. #11
    Membre confirmé Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut
    oui il est lancé mais après la console se bloque et tu dois la la fermer!
    c'est pas élégant.

    ce que je voudrais c'est :
    0) début
    1) lancement du programme
    2) return 0
    3) hop dégage

    est ce que ça se peut ??!!

  12. #12
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Peut-être que le fait de lancer l'application créé une nouvelle instance de cmd.exe (pour exécuter l'application) qui ne se ferme pas automatiquement (cmd /k <commande>) ou c'est app.exe qui l'a créée mais je ne suis pas sûr, je n'ai jamais testé mais si c'est le cas, il faudra alors ajouter system("exit') avant return 0.

  13. #13
    Membre confirmé Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut
    j'ai déjà testé ça mais ça marche pas!

    j'ai remarqué que quand je ferme l'application lancé par system, le programme passe à l'instruction !

    mais pourquoi reste t-il bloqué jusqu'à ce qu'on ferme app.exe ??

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 65
    Par défaut
    D'une façon ou d'une autre, il faut que tu détaches le processus que tu veux executer.

    Sous unix, il te suffirait de faire:
    system ("nohup ton_prog &");
    Sous windows, je ne sais pas.

    L'autre solution consisterait à mon avis à faire un "fork" dans ton code C lui-même ce qui a pour effet de détacher un processus fils dans lequel tu executerais ta commande externe tout en terminant tranquillement le processus père.

    Sous Windows là encore je ne sais pas.
    Mais tu peux lire ceci :
    http://www.developpez.net/forums/d33...-sous-windows/

  15. #15
    Membre confirmé Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut
    d'accord c'est un sujet demi-résolu !!merci

    sinon pour system, toute commande dos marche ??

    et est ce que vous avez des liens où ça parle de ça ??

  16. #16
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Pour la création de processus en C, c'est déjà dans la FAQ. Sous Windows, remplace _P_WAIT par _P_NOWAIT pour continuer l'exécution sans attendre la fin du processus. L'utilisation de CreateProcess te donnera également plus de contrôle, mais tu n'as pas l'air d'en avoir besoin ici.

    Pour system, oui toute commande compréhensible par le shell marche comme je te l'ai déjà dit dans mon post précédent. Je vais voir s'il y a une astuce pour faire ce que tu veux avec system et je posterai la solution s'il y en a et si je ne me fais pas devancer, mais je note en passant que system est une fonction dont il ne faut pas abuser parce que c'est un des trucs qui rend facilement les programmes non portables.

  17. #17
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 16
    Par défaut
    J'ai déjà utilisé dans un de mes programmes la commande start et ça marchait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("start app.exe");
    Si je me rappele bien, ça va démarrer le programme app.exe dans une nouvelle fenêtre ms-dos et la fenêtre ms-dos actuelle ne sera pas bloquée.

    J'avais utilisé cette technique pour exécuter 4 programmes (avec des données différentes) en parallèle sur 4 processeurs. C'est un programme qui faisait les 4 appels à system().

  18. #18
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Et voilà, je me suis fait devancer .

  19. #19
    Membre confirmé Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut
    d'accord merci beaucoup

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

Discussions similaires

  1. fonction system et probleme d'arobase
    Par yerome dans le forum Langage
    Réponses: 3
    Dernier message: 08/07/2005, 16h53
  2. Réponses: 10
    Dernier message: 08/02/2005, 16h04
  3. Réponses: 1
    Dernier message: 20/08/2004, 09h16
  4. Réponses: 2
    Dernier message: 30/03/2004, 11h31
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

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