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 :

bibliothèques dynamiques et portée des variables


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 17
    Par défaut bibliothèques dynamiques et portée des variables
    bonjour à tous

    Je travaille sur la conception de deux bibliothèques sous Linux. Celles-ci seront chargées par un programme sur lequel je n'ai pas la main. Les bibliothèques sont compilées séparément mais lors de l'exécution, possèdent le même pid (du programme qui les charge). Je me demandais bêtement s'il était possible de "joindre" ou du moins de récupérer dans ma première bibliothèque une variable de ma seconde bibliothèque ? J'avais pensé passer par les IPC, mais étant donné que lors de l'exécution, celles-ci sont chargées par le programme initial, n'est il pas possible de "bidouiller" dans l'espace mémoire réservé au programme lors de son exécution ?

    Sinon, vers quel IPC se tourner ? Sachant que la sécurité est primordiale. Les informations échangées peuvent être lues, mais pas modifiées. J'avais pensé à la mémoire partagée, mais apparemment ça serait venue avec system V, j'imagine bien que systemd a porté la fonctionnalité mais quand est-il de BSD ?

    Merci à vous

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 17
    Par défaut
    bon ba je répond moi même à ma question... j'aurais du essayer avant de demander, extern marche très bien Mais je serai tout de même curieux de connaître votre avis par rapport aux IPC

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Il n'y a absolument aucun rapport entre bibliothèque et pid. D'ailleurs tu dois sûrement charger des tonnes de ".so" qui appartiennent à root sans que ça te pose un soucis. Donc si tu peux lire le ".so" (droit "r") alors tu peux le charger et ce, quel que soit ton pid et le sien.

    Concernant ta solution "extern" ça signifie que tes variables sont globales donc connues de tout le programme. Effectivement ça fonctionne mais utiliser des globales sont généralement de fausses "bonnes" solutions car ça apporte généralement à terme plus d'ennuis que ça n'en résout. Ceci dit il existe des cas où les globales se justifient donc à voir.

    Sinon si tu réfléchis bien, ta question principale n'a pas vraiment de sens car tes librairies étant chargées par un programme principal ont alors de facto accès aux éléments dudit programme. Si par exemple ta librairie 1 possède une fonction toto() et que ta librairie 2 possède une fonction titi() et que tu veux faire passer ta variable float trugudlu à ces deux fonctions, suffit alors de programmer ces fonctions pour qu'elles acceptent un float et leur faire passer cette variable lors de l'appel. Bref tes librairies se comporteront exactement comme le code suivant:
    Code c : 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
    int main()
    {
        float trugudlu=3.14165;
        toto(trugudlu);
        titi(trugudlu);
    }
     
    void toto(float x)
    {
        printf("je me nomme toto et j'affiche %f\n", x);
    }
     
    void titi(float y)
    {
        printf("je me nomme titi et j'affiche %f\n", y);
    }

    Concernant les IPC, leur rôle est de transmettre des informations entre programmes distincts. Ce ne sont pas les seuls outils dédiés à ce travail car on peut citer aussi pour ça les pipes, les socket ou le bête fichier texte. La différence se situe dans le fait que les IPC sont gérés directement par le noyau Unix. Tu as cité la mémoire partagée mais perso je commencerais par envisager les files de messages qui possèdent en plus un outil de gestion. Rudimentaire certes mais présent au contraire de la shm où tout le monde peut écrire et écraser les données de tout le monde. Et l'autre différence avec les pipes et sockets, c'est que les données sont conservées même après la mort du processus qui les a écrit. Et la sécurité est assurée par la clef secrète que tu installes et que tu ne communiques qu'aux seuls programmes autorisés. Donc pour résumer, le seul problème de l'IPC ne se situe pas dans sa sécurité mais dans le choix que tu fais de l'utiliser quand c'est inutile ou de ne pas l'utiliser alors que ça serait nécessaire...
    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]

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 17
    Par défaut
    Une seule variable est déclarée en global. En effet ta solution est la bonne sauf que je n'ai pas la main sur le programme principal. Je ne peux pas le modifier pour lui ajouter des appels de fonctions. Je sais seulement qu'il appellera une fonction très précise d'une de mes bibliothèques avec des paramètres spécifiques, et une autre fonction (de mon autre bibliothèque) avec des paramètres différents. Seulement ma première aurait besoin d'un des paramètres envoyés à la deuxième. Du coup je me retrouve dans un situation un peu délicate

  5. #5
    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
    Tu mets une fonction GetLesParametres() dans la seconde 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.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/02/2005, 09h05
  2. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  3. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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