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 :

Exécuter un fichier


Sujet :

C

  1. #21
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par babar56
    Oui mais Skyrunner, j'imagine que tu as crée le fichier manuellement puisque je ne vois pas de fopen dans ton code.

    J'ai trouvé une syntaxe qui fonctionne chez moi. Par contre, il faudrait m'expliquer pourquoi ça fonctionne ... Si on déplace les \", alors j'ai une erreur. Et là ça marche ...

    Et surtout, est-ce que ça passera aussi sous linux ?

    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
    16
    17
    18
    #include <stdio.h> 
    int main(void) 
    { 
        char filename[1024]; 
        int loi=4; 
        int p=125; 
     
        FILE *fichier; 
     
        sprintf(filename, "Wolfram - Loi=%d - Pas=%d.ppm", loi, p);
        fichier = fopen(filename, "w"); 
        fclose(fichier);
     
        sprintf(filename, "\"Wolfra\"m \"- Loi=%df - Pas=%d.ppm", loi, p);
        system(filename); 
        getch();
        return 0; 
    }
    Heu, mon premier post sur le nouveau forum...

    Donc je viens d'essayer ton code chez moi et il ne fonctionne pas (chez moi), en revanche celui-ci fonctionne.

    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
    16
    17
    18
    19
    20
    21
     
    #include <stdio.h> 
    #include <stdlib.h>
     
    int main(void) 
    { 
        char filename[1024]; 
        int loi=4; 
        int p=125; 
     
        FILE *fichier; 
     
        sprintf(filename, "Wolfram - Loi=%d - Pas=%d.ppm.txt", loi, p);
        fichier = fopen(filename, "w"); 
        fputs("salut", fichier);
        fclose(fichier);
     
        sprintf(filename, "\"Wolfram - Loi=%d - Pas=%d.ppm.txt\"", loi, p);
        system(filename); 
        return 0; 
    }
    Sous Linux, je ne pense pas qu'il fonctionnera, parce que sous Linux, taper le nom d'un fichier dans un shell ne l'ouvre pas.

  2. #22
    Membre averti
    Inscrit en
    Février 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 70
    Par défaut
    Ca marche aussi chez moi, je vais préférer ta ligne qui est un peu plus logique que la mienne.

    Sous linux il faudrait rajouter un ./ ? Du genre system(./filename) ?

  3. #23
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par babar56
    Ca marche aussi chez moi, je vais préférer ta ligne qui est un peu plus logique que la mienne.

    Sous linux il faudrait rajouter un ./ ? Du genre system(./filename) ?
    Non plus.
    Sous Linux, il faut que le fichier ait le droit d'execution, mais meme si il possede ce dernier je pense pas que ca marche.

  4. #24
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut Re: Exécuter un fichier
    Citation Envoyé par Emmanuel Delahaye

    Citation Envoyé par rigobert

    la fonction system() permet de lancer exclusivement une commande de type EXE, COM, CMD ou BAT.
    Eh, on est plus en Win16... Windows 3.1, c'est fini...
    Quel rapport avec Win16 ?

    Les EXE, COM, CMD et BAT sont toujours d’actualité sous Win32 ; les CMD sont même une spécificité de la plateforme NT (W2K, XP). J'avais juste oublié d'ajouter que les commandes DOS internes (dir, type, del ...) étaient elles aussi utilisables de cette façon.

    Pour ceux qui lisent l’Anglais, la doc de l’implémentation de la fonction system() sous Windows se trouve ici

    En résumé, il est dit que la fonction system() permet de lancer une commande depuis un programme C, de la même façon qu’on saisirait une commande manuellement dans la console.

    Ce qui signifie que :

    1/ la chaîne passée à system() est de la forme <commande> [arg 1] [arg 2] … [arg n]
    donc passer par exemple "image.img" à system() revient à taper la même chose dans la console, ce qui n’a à priori pas de sens.

    2/ il est possible que dans un contexte très particulier une utilisation non documentée de system() donne miraculeusement le résultat escompté … sur un poste donné ; mais il y a de fortes chances pour que ça ne fonctionne pas sur la majorité des autres (cf discussions sans fin « je ne comprends pas : ça marche chez moi mais pas chez toi… »). Exploiter des fonctionnalités non documentées d’une API c’est se mettre à coup sûr en position de devoir faire face tôt ou tard à des problèmes de compatibilité (qui souvent vont se révéler insolubles).

    3/ la fonction system() ne convient pas pour « exécuter » un fichier document (non exécutable intrinsèquement) sans connaître (et donc sans pouvoir explicitement spécifier sur la ligne de commande) la commande ou l’application prenant en charge le type du document en question.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("c:\\tools\\view.exe image.img");
    a un sens et fonctionnera si "view.exe" se trouve bien à l'endroit spécifié (c:\tools) et si "image.img" se trouve dans le dossier courant, contrairement à

    qui n'en a aucun (à moins que "image.img" soit un exécutable renommé ), et qui ne devrait jamais fonctionner.

    Mais même en connaissant la commande à utiliser pour exécuter le document, produire un code 100% compatible restera très compliqué parce qu’il faudra d’une part être sûr que la commande en question est bien installée et d’autre part être capable de la localiser sur le disque dur.
    De plus, le fait que la commande recherchée ne soit pas installée ne signifie pas pour autant que le document ne peut être exécuté : il est tout à fait possible qu’une autre commande remplissant le même rôle soit elle bien installée, mais malheureusement … on ne la connaît pas !
    Enfin, c’est parfois l’utilisateur qui a choisi d’associer telle application à tel type de fichier, et en pareille situation, le développeur a le devoir de respecter le choix de l’utilisateur ; à défaut c’est son environnement de travail (ou de loisirs ) qui risque de devenir incohérent.

    4/ il existe (sous Windows je le reprécise) une base de données centrale des associations documents/commandes. En se servant de cette base de données, il est très facile d’exécuter un document au travers d’une commande open dans le shell, ce sans avoir à se poser la question de la commande physique à utiliser et encore moins d’où elle se trouve.

    Pour info, ceci est réalisable en une seule ligne de code avec la fonction Win32 ShellExecute() dont la doc se trouve ici .

    Je n’en dirai pas plus ici, la solution apportée étant spécifique à la plateforme Windows, elle sort un peu du cadre de ce forum.
    Ceci dit, je pense que l'implémentation dans d'autres systèmes doit être assez proche, dans l'esprit, de ce que j'ai décrit ici.

Discussions similaires

  1. Exécuter un fichier .BAT sur une machine distante
    Par ruff15 dans le forum Windows
    Réponses: 4
    Dernier message: 14/09/2005, 11h44
  2. Commande MS DOS qui exécute un fichier C++.
    Par Furius dans le forum C++
    Réponses: 5
    Dernier message: 09/09/2005, 17h42
  3. Exécuter un fichier .sql
    Par joul's dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/02/2005, 12h18
  4. Exécuter un fichier à partir du code
    Par TheCool dans le forum ASP
    Réponses: 28
    Dernier message: 18/01/2005, 19h22
  5. exécution des fichiers index.php
    Par berry dans le forum Apache
    Réponses: 4
    Dernier message: 20/12/2004, 20h29

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