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

Linux Discussion :

Comment faire communiquer deux programme entre eux en C ?


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut Comment faire communiquer deux programme entre eux en C ?
    Salut !

    Je ne sais pas si ce poste a ca place ici ou dans le forum programmation Linux, donc j'espaire ne pas m'étre trompé... :^/

    Je me pose la question de savoir quel est la meilleur solution pour faire communiquer deux applications entre elle de manière la plus rapide possible en C sous Linux ? et si la rapidité est beaucoup réduite par rapport a un programme communiquant avec lui même ?

    Bon... comme un exemple vaut mieux qu'un long discourt en voici un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // programmeQuiRecoi
    void main()
    {
        int num;
        int total = 0;
        while(1)
        {
            scanf("%d\n", &num);
            total += num;
            printf("total = %d\n",num);
        }
    }
    La méthode ici pour communiquer est faite avec un scanf. En utilisant donc un pipe comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./programmeQuiEmet | ./programmeQuiRecoi
    Mais il y a plusieurs problème avec cette technique (du moins comme je l'utilise actuellement avec un pipe) :
    1> La communication ne se fait que dans un seul sens.
    2> La communication ne se fait pas petit a petit mais seulement lorsque le programme qui émet est terminé.
    3> Le programme peu communiquer avec UN seul autre programme.
    4> Pour terminer je ne suis pas sur que les performances avec cette technique soit exceptionnel non ?


    Donc en fait il faudrais un mode de communication qui se face dans les deux sens un genre de truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void main()
    {
        int num;
        int total = 0;
        while(1)
        {
            receptionDUnInt(&num);
            total += num;
            emitionDUnInt(num);
        }
    }

    Avais vous une idée de quel technique (portable si possible) utiliser pour faire cela ?

    Merci pour votre aide.

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Tu peux voir du côté des files nommées (fifo) ou du côté des sockets unix.
    L'avantage des sockets unix c'est que yaurait pas grand chose à changer pour en faire une application réseau.

  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
    et tu peux avoir aussi un fichier intermédiaire, ou bien de la shared memory si tu sais que tu es sur le même système...

  4. #4
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut
    Merci pour vos réponses.

    Gruik> OMG ! Ca a l'aire génial les FIFO !!! =) C'est comme ça que marche les drivers Unix non ?
    Si non au niveaux performance ? serais tu si c'est aussi performant qu'un appelle a une fonction internet au programme ?
    Pour les sockets c'est intéressent si on travaille en réseau mais pour un fonctionnement local, les performances risque d'être médiocre par rapport au FIFO ou a de la "shared memory" non ?

    souviron34> Bha un fichier intermédiaire risque de prendre beaucoup de temps, par contre de la "shared memory" ça peu être sympa car très rapide c'est bien ça ?

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Les fifos ont une existance dans le systeme de fichier, mais je crois que leur contenu est géré en memoire partagée (pas sur disque).
    Je crois que les sockets unix sont implementés avec des fifos (en tout cas c'etait le cas avec un kernel 2.4)

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    NB : Ça s'appelle des pipes au passage.

  7. #7
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut
    Citation Envoyé par Gruik Voir le message
    Les fifos ont une existance dans le systeme de fichier, mais je crois que leur contenu est géré en memoire partagée (pas sur disque).
    Je crois que les sockets unix sont implementés avec des fifos (en tout cas c'etait le cas avec un kernel 2.4)
    Cela signifie que l'utilisation de "sockets unix" en local est aussi rapide que les "fifos" qui est aussi rapide que de la "memoire partagée" ?

Discussions similaires

  1. Comment faire communiquer deux threads
    Par mayu5 dans le forum POSIX
    Réponses: 3
    Dernier message: 14/05/2008, 13h45
  2. [SOAP] Comment faire communiquer deux applis?
    Par r0d dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 29/04/2008, 14h45
  3. Faire communiquer deux programmes python
    Par bestdomdom dans le forum Général Python
    Réponses: 5
    Dernier message: 26/10/2006, 09h30
  4. comment faire communiquer deux form MDI?
    Par eponette dans le forum Langage
    Réponses: 3
    Dernier message: 17/08/2005, 12h20
  5. [Securité] Faire communiquer 2 serveurs entre eux
    Par Wookai dans le forum Hébergement
    Réponses: 2
    Dernier message: 10/08/2005, 00h13

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