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 :

Faire intéragir les variables de deux programmes


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 1
    Par défaut Faire intéragir les variables de deux programmes
    Bonjour à tous ! Je créer ce sujet car j'ai un petit problème, j'aimerai faire deux programmes qui puissent avoir des variables communes. J'ai cherché longuement, très longuement, mais je n'ai rien trouvé . Je m'explique : je voudrai faire un programme où j'enregistre mes variables, et un deuxième programme "indépendant" avec une autre fenêtre (c'est un programme console) qui puisse utiliser les variables entrées.

    Mon premier programme contiendrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int testInt = 0;
    char testChar[100]; // Je ne sais absolument pas si je dois déclarer le char comme ça, merci de me guider !
     
    scanf("%d", &testInt);
    scanf("%s", testChar);
    Et mon deuxième programme pourrait utiliser les variables testInt et testChar (ici, je les affiche) :

    printf("Variable int : %d et variable char : %s.", testInt, testChar);

    Et bien voilà, je pense que j'ai fini ! J'attends votre aide avec impatience, merci à vous !

  2. #2
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Salut, pourrais-tu expliquer un peu plus le rôle des deux programmes?

    Est-ce que par exemple, "programme1" est le programme principal et "programme2" une librairie appelée dans "programme1"?

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

    Ce que tu veux faire ressemble furieusement à ce que l'on appelle "une mémoire partagé".

    L'idée donc, c'est "réserver" un espace mémoire, et de le rattacher à tes deux programmes. Les deux programmes ( ou plus si tu le souhaites ) auront donc accès aux mêmes données.
    Mais attention, qui dit accès aux mêmes données, dit qu'il faut les protéger. Tu dois inclures des sémaphores pour éviter que l'un des programmes écrit pendant que l'autre les lit, ou inversement.

    Regarde ici : http://mtodorovic.developpez.com/lin...e/?page=page_5
    Il y a toutes les informations dont tu auras besoin.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 828
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 828
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Une des règles de base de la programmation, c'est que les valeurs d'un programme sont enfermées dans le programme.

    Si tu veux communiquer ces valeurs à un autre programme, tu as plusieurs solutions qui ont toutes des avantages et inconvénients. Tu peux:
    • écrire ces valeurs dans un fichier, et l'autre programme pourra aller les rechercher
    • écrire ces valeurs dans un pipe, et l'autre programme pourra aller les rechercher
    • utiliser une "file de messages". C'est une espèce de télésiège. Tu "accroches" les valeurs au fil et l'autre programme peut les récupérer quand il veut
    • utiliser une "mémoire partagée" comme la dit archMqx. C'est une espèce de grosse zone en vrac. Tu places tes valeurs dans un coin de la zone et l'autre programme connaissant l'emplacement peut les récupérer


    L'avantage du fichier c'est que les valeurs restent à vie. On peut donc les récupérer plusieurs fois si on veut. Dans un pipe, la valeur récupérée disparait du pipe et tu ne peux les récupérer que dans l'ordre dans lequel elles ont été écrites. Dans la file de message on peut attribuer des n° divers aux valeurs (des étiquettes) et on peut alors filtrer lors de la récupération les valeurs ayant une étiquette particulière. Mais comme pour le pipe, la valeur est récupérée dans l'ordre d'écriture et une fois récupérée elle disparait de la file. Dans la zone de mémoire partagée c'est du vrac donc faut de l'organisation.
    Dernier détail: le pipe, la file de messages et la zone partagée sont des outils de type Unix. Probable que Windows a des outils équivalents mais je ne les connais pas.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Pour Windows, les pipes existent aussi (cf http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx) et fonctionnent de la même manière que sur Unix, la mémoire partagée aussi, même si (merci à l'API windows ) c'est plus compliqué à mettre en oeuvre (il faut se trimballer des FileMapping, cf encore http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx), tandis que les named pipes Windows s'apparentent plus à des sockets UNIX qu'à leur pendant unixien

    Bref le partage d'une même zone mémoire entre deux processus dépend assez fortement du système d'exploitation sous jacent, par conséquent ça rend ton code dépendant de la plateforme utilisant ces mécanismes.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sous Windows, si l'on fait des applications fenêtrées plutôt que des applications console, alors le plus simple pour s'échanger des données c'est de s'envoyer des messages Windows d'une fenêtre à l'autre.
    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. faire varier les variables
    Par PAYASS59 dans le forum PL/SQL
    Réponses: 6
    Dernier message: 16/03/2011, 19h56
  2. Réponses: 9
    Dernier message: 16/02/2010, 19h50
  3. Réponses: 2
    Dernier message: 05/06/2006, 17h51
  4. [OS][win][Solaris 10] Faire cohabiter les deux.
    Par FFF dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 02/11/2005, 12h29
  5. Réponses: 11
    Dernier message: 09/09/2005, 13h51

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