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écution d'un programe en C


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Points : 42
    Points
    42
    Par défaut exécution d'un programe en C
    Bonjour à tous j'ai Ecri ce programme C qui prend en paramètre une série de fichiers source .c, les compile chacun
    séparément et simultanément puis édite les liens pour produire un exécutable. Ce programme
    doit :
    lancer un processus fils pour chacun des noms de fichiers passés en paramètre;
    chaque fils doit exécuter le programme gcc -c sur le fichier dont il s'occupe;
    le père doit attendre la terminaison de tous ses fils;
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #include <stdio.h>  
    #include <stdlib.h>  
    #include <unistd.h>  
    int main(int argc, char* argv[])
    {int i;
    //pipe pip;
    int p;
    int T[2];
      char* options = "test";
     char* options1 = "-o";
       char commande[1024];
    char commande1[1024];
       printf("Lancement de %s avec pour arguments \n",argv[0]);
       for( i = 1; i < argc;++i)
       {
            sprintf(commande, "cc %s  %s %s", options1,options, argv[i]); // formate la commande à donner à system()
            printf("%s : commande: %s\n ",argv[i], commande);
            system(commande); // balance la commande
             p=fork();
             if(p==-1)
             printf("Erreur\n");
             else if (p==0)
              { close( T[0]);
                write(T[1],options,10);
                close(T[1]);
                read(T[0],options,10);
                 sprintf(commande1, "./%s",options);
                system(commande1);
                close(T[0]);
              }
       }
     exit(1);
    }
    il s"excute avec des erreurs que j trouve pas
    Merci de me proposer une solution

  2. #2
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    pourquoi ne pas utiliser make au lieu d'un programme, c'est fait pour ça.


    autrement ton programme ne fait pas ce que tu dit.

    tu lance systeme et ensuite tu appelle fork, alors que cela devrais être le contraire.

    quelque chose dans ce style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    pid = fork()
    if (pid == 0) { 
      system(command)
    } else {
       ...
    }
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  3. #3
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    pourquoi ne pas utiliser make au lieu d'un programme, c'est fait pour ça.
    Ça m'a tout l'air d'être un cas d'école. Je ne vois effectivement pas l'intérêt d'un tel programme dans le monde du travail.

    Sinon ce serait bien de nous donner les erreurs que tu reçois à l'exécution.

  4. #4
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par muad'dib Voir le message
    Ça m'a tout l'air d'être un cas d'école. Je ne vois effectivement pas l'intérêt d'un tel programme dans le monde du travail.

    Sinon ce serait bien de nous donner les erreurs que tu reçois à l'exécution.
    oui, tu dois avoir raison petite souris de la planète arakis....
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  5. #5
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut
    T'aurais pu continuer sur ton premier post quand même?!

    Bref, pour ton problème, c'est simple, tu fais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int T[2];  // 'T' n'est pas initialisé, tu le déclare simplement...
    [...]
     
    close( T[0]); // T[0] contient du caca, pareil pour T[1] -> normal que ca plante
    [ et plein de trucs avec T[0]...]
    Après, je ne comprends pas ce que tu veux faire...

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par Gui13 Voir le message
    T'aurais pu continuer sur ton premier post quand même?!
    ...
    Non, il a raison, les deux sujets sont bien différents.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #7
    Membre actif Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Points : 245
    Points
    245
    Par défaut
    Citation Envoyé par patricx Voir le message
    Ce programme
    doit :
    lancer un processus fils pour chacun des noms de fichiers passés en paramètre;
    chaque fils doit exécuter le programme gcc -c sur le fichier dont il s'occupe;
    le père doit attendre la terminaison de tous ses fils;
    Tu geres mal le fork il me semble. De maniere generale:

    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
     
     
    pid_t pid;
     
    if ((pid = fork()) < 0)
      return (1);
     
    if (pid)
      {
        printf("Je suis le pere\n");
        wait(NULL);
        printf("Bye\n");
      }
    else
      {
        printf("Je suis le fils\n");
      }
    La fonction wait attendra la fin du fils pour continuer.

    Sans parler du code, c'est vrai que pour faire des compilations conditionnelles (en fonction de ce que tu veux mettre dans les fichiers), comme par exemple dans un generateur de templates perso, c'est plus simple d'utiliser un Makefile et des scripts en bash/python/w/e...

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/01/2013, 21h00
  2. PB d'exécution du program
    Par ouakammathieu dans le forum C
    Réponses: 4
    Dernier message: 28/03/2008, 06h53
  3. Réponses: 6
    Dernier message: 22/05/2007, 10h45
  4. mon programe asp ne s'exécute pas????????????
    Par ghita269 dans le forum ASP
    Réponses: 1
    Dernier message: 07/11/2005, 11h23
  5. [ArchiveBuilder][JavaMail] exécution impossible...
    Par Gorthal dans le forum JBuilder
    Réponses: 7
    Dernier message: 10/01/2003, 09h12

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