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

POSIX C Discussion :

fork + exec + mémoire partagée ?


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut fork + exec + mémoire partagée ?
    Bonjour,

    Voici le topo :

    - Je crée une mémoire partagée dans un programme principal
    - Je crée des fils avec fork à partir du main de ce programme principal et je
    recouvre avec un exec

    J'ai donc des nouveaux processus avec un nouveau code dans le main et je ne peux
    donc pas récupérer l'adresse de la mémoire partagée...

    J'ai alors pensé à envoyer l'adresse comme parametre du processus que je
    recouvre mais ca ne fonctionne pas.

    Quelqu'un aurait-il une solution pour que mes nouveaux processus puisse utiliser
    la mémoire partagée ?

    Merci

    ++

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Bonjour,
    ayant eu le même problème, je poste ici une solution alternative au cours du lien de Fred83.
    Comme je voulais être "POSIX compliant", je me suis orienté vers une combinaison de shm_open + mmap

    Chez le père:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    descripteur = shm_open(nom_mémoire_partagée, O_CREAT|O_RDWR, 0777);
     
    if (descripteur == -1)
         erreur;
    else if (ftruncate(descripteur, taille_mem_partagée) < 0)
         erreur;
    else
         ptrVoidAdr = mmap(NULL, taille_mem_partagée, PROT_READ|PROT_WRITE, MAP_SHARED, descripteur, 0)
     
    if (ptrVoidAdr == MAP_FAILED)
        erreur;
    Voilà pour le père. Pour les processus fils qui ont muté par l'exec, j'ai collé comme arguments le ptrVoidAdr, le nom de la mémoire partagée et la taille de la mémoire partagée afin qu'ils puissent les récupérer et ça donnera pour eux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    descripteur2 = shm_open(nom_mémoire_partagée, 0_CREAT|O_RDWR, 0777)
     
    if (descripteur2 != -1)
       ptrVoidAdr2 = mmap(ptrVoidAdr, taille_mem_partagée, PROT_READ|PROT_WRITE, MAP_SHARED, descripteur2, 0)
    Voilà, j'espère que cette esquisse de code pourra aider d'autres dans la lutte pour une mémoire vraiment partagée pour tous !

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

Discussions similaires

  1. mémoire partagée ?
    Par youp_db dans le forum C
    Réponses: 1
    Dernier message: 18/05/2006, 15h54
  2. Sémaphores et Mémoires partagées
    Par Sensib dans le forum C++
    Réponses: 3
    Dernier message: 19/03/2006, 18h14
  3. Réponses: 17
    Dernier message: 02/02/2006, 12h03
  4. création d'objet en mémoire partagé
    Par BigNic dans le forum C++
    Réponses: 6
    Dernier message: 28/11/2005, 18h41
  5. [CR][paradox] mémoire partagée disponible insuffisante !
    Par AGT dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 24/03/2004, 14h27

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