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

Réseau C Discussion :

Liaison entre programmes


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut Liaison entre programmes
    Bonjour à tous !

    J'aurais aimé savoir comment il était possible de transférer des données d'un programme vers un autre.

    En fait, je souhaite réaliser un programme qui gére un réseau de train miniature par l'intermédiaire du port parallèle. Le PC est relié à une carte avec un PIC.
    Le problème est le suivant : les données arrivent sur le port parallèle à une cadence donnée. Je pensais donc réaliser un programme synchrone avec cette cadence qui se contente d'enregistrer les données (que le PIC lit 3 par 3 et donc que le PC recoit 3 par 3) dans un tableau. Un autre programme s'occuperait de gérer les automatismes (ex: mettre un feu au rouge si tel train est passé à tel endroit) et enfin un dernier programme serait chargé d'envoyer les données à la carte (en gérant les données prioritaires par exemple, etc.).

    Donc j'aurais voulu savoir comment faire communiquer ces trois programmes (écrits en C) entre eux...

    J'espère avoir été clair

    Merci !

    Charlock

  2. #2
    Membre actif Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Points : 299
    Points
    299
    Par défaut
    Par réseau tcp udp
    Par fichier pipe etc...
    Tu peux regarder autrement la MPI.
    http://fr.wikipedia.org/wiki/Message_Passing_Interface

    Mais peut etre faut'il que tu repenses ton programme en terme de processus légers, pourquoi trois exe différents, si ils sont sur la meme machine.
    Si tu ne te plantes pas, comment veux tu pousser?

  3. #3
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Sous quel système d'exploitation travailles tu?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Euh, là, on dirait que pratiquement toutes ces données sont partagées à un moment ou un autre.

    Là, je te conseillerais de faire une seule application, mais multithreadée.
    (Un processus, trois threads).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    Merci à tous !

    Mais peut etre faut'il que tu repenses ton programme en terme de processus légers, pourquoi trois exe différents, si ils sont sur la meme machine.
    Bah justement c'est peut être là le problème !! C'était la première solution qui m'était passée par la tête.

    Sous quel système d'exploitation travailles tu?
    Je sais pas encore sur quoi je vais le faire, vu qu'il faut que je me dégotte un PC de récup. Donc peut etre MS-DOS, ou Linux. Pas Windows en tout cas

    Euh, là, on dirait que pratiquement toutes ces données sont partagées à un moment ou un autre.

    Là, je te conseillerais de faire une seule application, mais multithreadée.
    (Un processus, trois threads).
    Ca sonne bien ca Je vois l'idée mais je m'y connais pas du tout dans ce domaine. Tu peux expliquer un tout petit peu plus stp ?

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Thread == processus léger.

    Donc, dès le début de ton programme (le main() est le thread principal), tu crées tes buffers partagés, puis tu lances deux threads supplémentaires (avec pthread_create() sous unixoïde, _beginthreadex() sous Windows), comme ça tu te retrouves avec trois threads, qui peuvent tous les trois manipuler les buffers.
    --> Un thread pour chacune des trois tâches.

    Pour la copie des données reçues par le premier thread, tu devras sûrement utiliser un verrou (pour empêcher le premier thread de modifier pendant que le second lit, et permettre au second de vider le buffer).
    Sous unixoïde, les verrous sont des mutex (pthread_mutex_init() ou pthread_mutex_create()), sous Windows, on utilise des CRITICAL_SECTION (InitializeCriticalSection()).
    Note: le verrou doit être créé en même temps que les buffers partagés, pour être passés aux threads.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    OK merci beaucoup !

    Je dois t'avouer que ca m'a l'air très très compliqué. Mais bon en reprenant ca au calme et après de plus amples recherches sur internet, j'ai bon espoir !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Charlock
    Je sais pas encore sur quoi je vais le faire, vu qu'il faut que je me dégotte un PC de récup. Donc peut etre MS-DOS, ou Linux. Pas Windows en tout cas
    Windows, c'est le Diable !
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    On peut aussi utiliser les "pthread" sous Windows.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Oui, mais pas sans bibliothèque.

    Emmanuel : Je crois que c'est pour une question d'accès au port parallèle : La plupart des applications hors-imprimante utilisent le port parallèle à bas niveau, chose impossible sous WinNT à moins de développer un "kernel-mode driver".

    Charlock : Par contre, tu peux utiliser un windows non-NT (mais il faut désactiver toute optimisation sur le source qui effectue les accès au port).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Citation Envoyé par Médinoc
    Oui, mais pas sans bibliothèque.
    Hum pour faire des thread il faut toujours utiliser une bibliothèque nan ?

    Citation Envoyé par Médinoc
    Emmanuel : Je crois que c'est pour une question d'accès au port parallèle : La plupart des applications hors-imprimante utilisent le port parallèle à bas niveau, chose impossible sous WinNT à moins de développer un "kernel-mode driver".
    Il me semble que sous NT, c'est le HAL qui bloque la connexion car il faut certains droits. Faire un driver sous windows, il faut acheter le DDK(device driver kit) nan ?

    Citation Envoyé par Médinoc
    Charlock : Par contre, tu peux utiliser un windows non-NT (mais il faut désactiver toute optimisation sur le source qui effectue les accès au port).
    ui, ca fonctionne

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par gnto
    Hum pour faire des thread il faut toujours utiliser une bibliothèque nan ?
    Pas sous Win32 en tout cas (à moins que tu ne considères l'API système comme une bibliothèque).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    à moins que tu ne considères l'API système comme une bibliothèque
    C'est le même principe:une interface de programmation rassemblant des fonctionnalités permettant un bon niveau d'abstraction.
    Sinon quelles sont les différences notables?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour moi, l'API système a l'avantage suprême d'être toujours présente de base sur le système en question (et dans tous les SDK pour ledit système), surtout lorsqu'il s'agit des modules indispensables ne serait-ce qe pour lancer le programme (à commencer par kernel32.dll, qui justement est contient toute l'API pour les threads). Donc, dès qu'on programme sous Win32, on a le multithreading à portée de main.
    De plus, sous Win32, tout est géré "au niveau thread" : Il n'y a pas de fonction d'attente bloquant un processus entier (j'ignore si c'est ou non le cas sous Linux)

    À ce sujet, j'ai une petite question au sujet des pthreads sur linux: Dans le cas où les fonctions système d'attente de Linux bloquent uniquement le thread courant et non tout le process, c'est que Linux supporte directement les threads (comme Win32) et que libpthread.a n'est qu'une interface, non?

    PS: C'est dans " Thread POSIX et gestion mémoire" qu'on voit l'utilité de gérer les threads (et le reste) par des handles...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [VB.NET] Liaison entre les pages aspx et vb
    Par cosmos38240 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 18/03/2005, 12h55
  2. liaison entre plusieurs base de donnee
    Par GMI dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/12/2004, 18h42
  3. Opérer une liaison entre 2 DBLookup
    Par pey dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 10h11
  4. Liaison entre un dblookupcombobox (filtre) et un dbgrid
    Par naw dans le forum Bases de données
    Réponses: 9
    Dernier message: 22/08/2004, 12h12
  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