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 :

communication entre un programme en C et un autre programme


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut communication entre un programme en C et un autre programme
    Bonjour,

    je devellope un programme en C qui fait des calculs sur la mesure du temps d'execution d'un morceau de code qui appartient à un autre programme devellopé en c, c++ ou bien java. est ce qu il y a une methode dans C pour que mon programme(devellopé en C) ecoute l'execution du debut de morceau de code et sa fin pour lui permettre de calculé le temps d'execution

    j'espere que mon besoin est claire.
    merci pour vos reponse

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

    Il faut que tu précise comment tu espère "écouter" le programme cible.

    En java, tu pourrais par exemple instrumenter les méthodes ou les classes lors de leur chargement par la JVM. Mais ça sera très difficile de faire ça avec un programme en C; il faudra développer un équivalent de javassist.
    Pour l'écoute de programmes développés en C/C++, je ne connais pas de méthode, mais une piste: la programmation orientée aspect ... (mais je n'ai jamais expérimenté)

    La seconde hypothèse est que ton programme "sonde" soit dotée d'API qui permettront à un autre programme d'invoquer les démarrages et les fin de mesures dans des portions particulières du code que tu veux mesurer.
    Cet API pourra simplement être utilisé dans les programmes C/C++; pour ce qui est des programmes Java, il sera possible d'utiliser JNI pour que la sonde soit invoquée.

  3. #3
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut
    pour plus de precision

    si j'ai un programme quelconque qui s'exécute et il est constituer de plusieurs taches à faire (tache1, tache2,tache3 et tache4)

    moi avec un programme en C je dois mesurer le temps d'exécution d'une tache x qui s'exécute dans un temps x c'est pourcela j'ai dis que je dois être à l'ecoute.
    quelqu un m'a dit que D-Bus peut faire cela mais je sais pas jusqu a maintenant comment l'utiliser et est ce qu il va bien repondre à mes besoin.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je n'ai jamais utilisé D-Bus, mais de ce que j'en vois, il s'agit seulement d'un outil pour faire parler des applications les unes avec les autres.
    Ca peut donc permettre à une appli (sonde) d'écouter une autre application ... à condition que celle-ci lui parle!

    Donc ton programme doit être adapté:
    - avant la tâche 1: signaler à la sonde que la tâche 1 démarre
    - tâche 1
    - après la tâche 1: signaler à la sonde que la tâche 1 est finie

  5. #5
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Salut,

    Sous systeme compatible POSIX, tu peux faire comme ceci. Par contre ce n'est pas tres precis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    debut = time(NULL);
     
    pid = fork();
     
    if (pid == -1)
        //erreur
    else if (pid == 0)
        exec(...); // a adapter
    else
        wait(&status);
     
    fin = time(NULL);

  6. #6
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Citation Envoyé par tonton fred Voir le message
    Salut,

    Sous systeme compatible POSIX, tu peux faire comme ceci. Par contre ce n'est pas tres precis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    debut = time(NULL);
     
    pid = fork();
     
    if (pid == -1)
        //erreur
    else if (pid == 0)
        exec(...); // a adapter
    else
        wait(&status);
     
    fin = time(NULL);
    Et ça sous entend aussi que chaque partie de son programme (chaque tâche) est indépendante (ou alors synchro et tout le bazard).

    J'aurais vu presque pareil, mais avec des signaux, plutôt que des exit_status.

    Tu envois par exemple un SIGUSR1 quand la tâche commence, et un SIGUSR2 quand elle finit. Mais encore une fois ce n'est pas forcément super précis (à partire du moment ou tu passes par le système, tu vas avoir quelques ms de perdue, que ce soit avec des signaux, des files, des sémaphores.., donc ça dépend aussi de la précision que tu veux).

    Sinon sous unix, tu peux toujours utiliser la commande time:

    time monprog

  7. #7
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    seeme: tout a fait, en fait ca depend beaucoup de ce que rimie_rimie entend par
    Citation Envoyé par rimie_rimie Voir le message
    si j'ai un programme quelconque qui s'exécute et il est constituer de plusieurs taches à faire (tache1, tache2,tache3 et tache4)

    moi avec un programme en C je dois mesurer le temps d'exécution d'une tache x qui s'exécute dans un temps x
    Parce que si une "tache" est un programme et pas une (sequence de) fonction, alors mesurer le temps avant et apres un appel a system() suffit, et est en plus portable si on met de cote la syntaxe de la ligne de commande.
    A condition bien sur qu'une precision de l'ordre de la seconde soit acceptable...
    Pourrais tu etre plus precis sur ce que tu veux mesurer?

  8. #8
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 21
    Par défaut meme probleme avec SMA
    Bonjour,

    Je cherche la même fonctionnalité que remie remie, mais pour moi tache1, tache2....son des agent(dans mon architecture multi-agent) je veux mesurer le temps d'exécution d'un agent qui s'exécute sur mon système (sous linux)
    si c'est possible vous partagez vos idées avec moi.

    Merci

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    compiler avec -pg et utiliser gprof ça ne suffirait pas ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/06/2014, 14h34
  2. Executer un programme .py à partir d'un autre programme .py
    Par manaliac dans le forum Général Python
    Réponses: 2
    Dernier message: 24/08/2010, 15h29
  3. Réponses: 10
    Dernier message: 05/10/2009, 19h00
  4. Réponses: 13
    Dernier message: 27/02/2008, 16h01
  5. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05

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