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 :

comment creer un programme qui appelle deux autre programmes


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut comment creer un programme qui appelle deux autre programmes
    bonjour,voila je suis entrains de creer un programme qui conciste a implementer deux algorithmes de compressions de fichiers.
    j'ai implementer les deux algorithmes chaqu'un avec son main (les deux programmes séparer)et les deux aussi me donne un taux de compression. alors ce que je veux faire c'est de creer un autre programme qui appelle les deux programme citer précedement et en meme temps il fais la comparison entre les deux taux de compression.
    NB:je programme avec le c et sous linux.
    merci de me donner une reponse(car j'ai pas beaucoup de temps)
    onrevoir

  2. #2
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par itcha
    bonjour,voila je suis entrains de creer un programme qui conciste a implementer deux algorithmes de compressions de fichiers.
    j'ai implementer les deux algorithmes chaqu'un avec son main (les deux programmes séparer)et les deux aussi me donne un taux de compression. alors ce que je veux faire c'est de creer un autre programme qui appelle les deux programme citer précedement et en meme temps il fais la comparison entre les deux taux de compression.
    NB:je programme avec le c et sous linux.
    merci de me donner une reponse(car j'ai pas beaucoup de temps)
    onrevoir
    Bonsoir,

    Plusieurs solutions sont possibles (liste non exhaustive ):
    • utiliser un script qui appellera les deux programmes de compression et affichera les taux de compression
    • appeler directement les fonctions réalisant la compression depuis ton main (le main appellerait la fonction de compression A, puis la fonction de compression B, puis calculerait les deux taux de compression)
    • utiliser deux fork et les fonctions de la famille execv pour charger les binaires de tes programmes de compression à la place du code des fils

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    comme a dit zooro la plus simple des solutions est appeler un script

    sinon faire un mini programme C qui appellera system() en lançant les 2 programmes....

  4. #4
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par souviron34
    sinon faire un mini programme C qui appellera system() en lançant les 2 programmes....
    je n'arrive pas à croire que j'ai oublié system()

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    bah si on oubliait pas quelque chose de temps en temps on serait pas humain

    mais c'est sûr qu'utiliser 2 fork et un execv est un peu...... prendre une pelle mécanique pour écraser une mouche

  6. #6
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    oui system(); c'est la solution que je pense la plus simple, parce que fork + execv = moyen

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut erreurs,aidez mois
    Citation Envoyé par souviron34
    comme a dit zooro la plus simple des solutions est appeler un script

    sinon faire un mini programme C qui appellera system() en lançant les 2 programmes....
    bonjour,
    j'ai essayer de suivre ce que vous m'aviez indiquez mais j'ai un probleme.a chaque fois que je lance le programe il m'affiche ceci( sh:line1 huffman:command not found,meme chose pour lzw et un commentaire lzw est meilleur que huffman) et si je met le chemin par exemple si l'emplacement eset dans user s'affiche(sh:/home/user/huffman/:aucun repertoire).je vous poste ce que j'ai fais avec les deux programme est indiquez moi s'il vous plais l'erreur et est ce que la fonction de comparaison est juste avec les deux paramettre(t1 et t2) dans les deux programmes.
    merci d'avance.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Bonsoir,

    c'est peut-être une question bête, mais comment s'appellent les fichiers exécutables "huffman" et "lzw" ?
    As-tu vérifié si les fichiers existent vraiment ?
    Que souhaites tu comparer ?
    Les deux variables t1,t2 ne sont pas initialisées.
    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
    #include<stdlib.h>
    #include<stdio.h>
     
    void comparaison(float,float);
     
    int main(void)
    {
    int s;
    float t1;float t2;
    s=system("/home/user/huffman &");
    s=system("/home/user/lzw &");
    comparaison(t1,t2);
    return EXIT_SUCCESS;
    }
     
     
     
    void comparaison(float t1,float t2)
    {
    float t1;float t2;
    if(t1<t2)
    printf("huffman est meilleur que lzw");
    else
    printf("lzw est meilleur que huffman");
    }
    Si tu ne testes pas le retour de system(), pas besoin de garder sa valeur de retour.

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    je ne peux que souscrire à ce qu'a dit Je@ome ....

    Là d'une part ta comparaison ne fait rien, d'autre part des t1 et t2 ne sont pas initialisés, d'où comportement indéterminés...

    Sinon tes appels à system() sont corrects, mais on ne sait pas où sont des exécutables...

    D'autre part, si tu es sous Windows (cygwin, codeblocks, etc..) les executables se terminent par .exe (même si dans le make tu as mis lzw, tu auras lzw.exe).


    Enfin, je ne vois pas comment, avec ces commandes, tu peux tirer une comparaison du taux de compression.

    Le taux de compression serait taille originale / taille finale...

    Où est-il calculé ???

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut
    bonjou,merci pour vos réponse.j'ai on va dire ecrit cette fonction mais j'aimerais bien que vous m'indiquier est ce que c'est juste oui ou non.
    aussi j'ai un autre probleme dans mon programme lzw(car quand je lance l'execution la décompression se fais automatiquement apres la compression),j'aimerais que le faire séparement.je vous poste le programme .s'il vous plais indiquez moi mes errurs.j'ai pas beaucoup de temps pour résoudre tous les problemes.(nb:je suis débutante).
    Fichiers attachés Fichiers attachés

  11. #11
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Citation Envoyé par main principale
    s=system(lzw&");
    il manque une "
    s=system("lzw&");
    Citation Envoyé par main principale
    float t1,float t2;
    pas la peine de remetre float pour la deuxième variable
    float t1,t2;
    Ca c'est pour le main principale *.txt

    Ca c'est pour lzw essaie :
    exit(-1);
    Utilise plutôt la constante EXIT_FAILURE pour la portabilitée de la chose.
    exit(EXIT_FAILURE);
    exit(-2);
    Pareil.
    exit(-3);
    Pareil.
    Voilà c'est tout
    Enfin je crois

  12. #12
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par itcha
    bonjou,merci pour vos réponse.j'ai on va dire ecrit cette fonction mais j'aimerais bien que vous m'indiquier est ce que c'est juste oui ou non.
    aussi j'ai un autre probleme dans mon programme lzw(car quand je lance l'execution la décompression se fais automatiquement apres la compression),j'aimerais que le faire séparement.je vous poste le programme .s'il vous plais indiquez moi mes errurs.j'ai pas beaucoup de temps pour résoudre tous les problemes.(nb:je suis débutante).
    Dis moi, où sont passés t1 et t2 dans ton programme ? Et puis comparaison() déclarée comme ne renvoyant rien qui renvoie un float, heu non, qui ne renvoie finalement rien mais qui est définie comme renvoyant un float (pourquoi un float d'ailleurs ? Désolé de te le dire , mais c'est affreux ). Bref, ton code ne compile même pas et on ne voit nul part où est réalisé le chonométrage .

    Voici en propre ce que cela doit donner :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
     
    int isClockAvailable(void) {
     
       int res = 0;
       clock_t t = clock();
       if (t != (clock_t)-1) {
         res = 1;
       }
       return res;
     
    }
     
    void comparaison(clock_t t1, clock_t t2)
    {
      if(t1 < t2) {
        puts("Huffman a ete plus rapide en temps CPU que Lzw");
      }
      else {
        puts("Lzw a ete plus rapide en temps CPU que Huffman");
      }
    }
     
    int main(void)
    {
     
       int exitStatus = -1;   
       clock_t start, end, diffLzw, diffHuffman;
     
       if (!isClockAvailable()) {
          fprintf(stderr, "Sorry, non clock available. Exiting...\n");
          exit(EXIT_FAILURE);
       }
     
       start = clock();
       exitStatus = system("huffman &");
       end = clock();
     
       if (exitStatus == -1) {
          fprintf(stderr, "Huffman compression program failed. Exiting...\n");
          exit(EXIT_FAILURE);
       }
     
       diffHuffman = end - start;
     
       start = clock();
       exitStatus = system("lzw &");
       end = clock();
     
       if (exitStatus == -1) {
          fprintf(stderr, "LZW compression program failed. Exiting...\n");
          exit(EXIT_FAILURE);
       }
     
       diffLzw = end - start;
     
       comparaison(diffHuffman, diffLzw);
     
       return EXIT_SUCCESS;
     
    }
    A+

  13. #13
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Foobar1329
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int isClockAvailable(void) {
     
       int res = 0;
       clock_t t = clock();
       if (t != (clock_t)-1) {
         res = 1;
       }
       return res;
     
    }
    Une façon compliquée d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int isClockAvailable(void) 
    {
       return  clock() != (clock_t)-1;
    }
    voire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define isClockAvailable() (clock() != (clock_t)-1)

  14. #14
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Les solutions qui comporte le moins de lignes ne sont pas toujours celles quis ont les plus faciles à comprendre.

  15. #15
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par Shugo78
    Les solutions qui comporte le moins de lignes ne sont pas toujours celles quis ont les plus faciles à comprendre.
    Les solutions qui comportent le plus grand nombre de lignes ne sont pas toujours les plus faciles à comprendre.

  16. #16
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut
    Citation Envoyé par Foobar1329
    Hello,



    Dis moi, où sont passés t1 et t2 dans ton programme ? Et puis comparaison() déclarée comme ne renvoyant rien qui renvoie un float, heu non, qui ne renvoie finalement rien mais qui est définie comme renvoyant un float (pourquoi un float d'ailleurs ? Désolé de te le dire , mais c'est affreux ). Bref, ton code ne compile même pas et on ne voit nul part où est réalisé le chonométrage .

    Voici en propre ce que cela doit donner :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
     
    int isClockAvailable(void) {
     
       int res = 0;
       clock_t t = clock();
       if (t != (clock_t)-1) {
         res = 1;
       }
       return res;
     
    }
     
    void comparaison(clock_t t1, clock_t t2)
    {
      if(t1 < t2) {
        puts("Huffman a ete plus rapide en temps CPU que Lzw");
      }
      else {
        puts("Lzw a ete plus rapide en temps CPU que Huffman");
      }
    }
     
    int main(void)
    {
     
       int exitStatus = -1;   
       clock_t start, end, diffLzw, diffHuffman;
     
       if (!isClockAvailable()) {
          fprintf(stderr, "Sorry, non clock available. Exiting...\n");
          exit(EXIT_FAILURE);
       }
     
       start = clock();
       exitStatus = system("huffman &");
       end = clock();
     
       if (exitStatus == -1) {
          fprintf(stderr, "Huffman compression program failed. Exiting...\n");
          exit(EXIT_FAILURE);
       }
     
       diffHuffman = end - start;
     
       start = clock();
       exitStatus = system("lzw &");
       end = clock();
     
       if (exitStatus == -1) {
          fprintf(stderr, "LZW compression program failed. Exiting...\n");
          exit(EXIT_FAILURE);
       }
     
       diffLzw = end - start;
     
       comparaison(diffHuffman, diffLzw);
     
       return EXIT_SUCCESS;
     
    }
    A+
    bonjour,
    voila dans la première fois que je vous ais envoyer la fonction de comparaison ce que je voulais faire c'est la comparaison entre les taux de compression .
    et si vous regardez bien dans la piece jointe dans le programme lzw vous voyer que j'ai utiliser ( (float)nb_octet/ftell(output) ) pour calculer le taux de compression.et (tv.usec-t_debut)) pour le temps d'execution.
    ce que j'arrive pas a faire c'est me comment affecter le taux dans le main pricipal.
    eclairez moi s'il vous plais et merci d'avance.

  17. #17
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Le nombre d'erreurs possibles croit avec le nombre de lignes...
    C'est vrai mais je ne suis pas d'accord pour le fait de devoir faire un code d'une ligne ultra complexe avec 50 signes qui doivent eêtre placé à des endroits bizzares et dont l'écriture n'est pas implicite, il faut trouver un juste milieu mais ne pas tomber dans un éxcés car les deux sont aussi mauvais.
    Citation Envoyé par Emmanuel Delahaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int isClockAvailable(void) 
    {
    return  clock() != (clock_t)-1;
    }
    Ca je suis d'accord c'est le juste milieu.
    [quote=Emmanuel Delahaye]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define isClockAvailable() (clock() != (clock_t)-1)
    Mais là....

    tout ça pour dire que la qualitée d'un code ne se mesure pas à sa densitée et qu'il faut rester au milieu en restant entre les deux êxtremes.
    Enfin c'est mon avis, a vous de voir .

  18. #18
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Shugo78
    ...il faut rester au milieu en restant entre les deux êxtremes;;;

    tu fais fort là

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/02/2011, 21h19
  2. Comment creer un ocx pour appel dans page html
    Par minette dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 19/07/2006, 12h21
  3. Réponses: 12
    Dernier message: 06/06/2006, 18h22
  4. programme qui surveille un autre
    Par danisam dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 25/08/2005, 10h45
  5. Procedures stockées qui appellent un autre ?
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 09/05/2005, 09h30

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