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

Administration système Discussion :

[SHM] shmget crée uniquement des segments de mémoire partagée privée


Sujet :

Administration système

  1. #1
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut [SHM] shmget crée uniquement des segments de mémoire partagée privée
    Bonjour à tous.
    Je souhaite créer un segment de mémoire partagée entre deux instances de mon programme. Mais voila : chaque instance crée son propre segment, et pour cause ceux-ci sont privés.

    Je crée le segment de cette manière
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    key_t shmkey = static_cast<key_t>(0xa51d);
    if(shmid = shmget(shmkey, SHMSIZE, IPC_EXCL|IPC_CREAT|0644) < 0)
    {
       if(errno != EEXIST || (shmid = shmget(shmkey, SHMSIZE, 0644) < 0))
       {
          if(errno != EEXIST)
             return ERROR1;
          else
             return ERROR2;
       }
       [...]
    }
    De cette manière, mon processus sait s'il est propriétaire ou non du segment. Mais quand je tappe la commande "ipcs" dans le shell alors que deux instances de mon programme tournent, je peux lire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    0x00000000  2162707     dev       644       1440016   1         dest
    0x00000000  2263452     dev       644       1440016   1         dest
    Selon le man d'ipcs, une clé de valleur nulle (zéro) signifie que le segment est privé, ce que je ne souhaite pas. J'ai bien sûr tenté d'initialiser ma shmkey avec ftok, mais je n'ai accès à aucun nom de fichier (je ne suis pas dans le main, et impossible de passer argv en argument). D'autres valeurs pour shmkey ne changent rien.

    Si quelqu'un pouvait me donner un petit coup de pouce

  2. #2
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour, j'ai fini par trouver la solution à mon problème : Lorsque la commande de contrôle IPC_RMID (suppression du segment de mémoire partagée) est émise, le segment n'est pas détruit tout de suite : il est basculé en privé (comme si la clé valait IPC_PRIVATE) le temps que tous les processus attachés s'y détachent.

    Ne connaissant que la seconde particularité, je lançais une commande de suppression tout de suite après l'attachement du propriétaire au segment, ce qui m'assurait la suppression dudit segment dans le cas où le processus planterait.

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

Discussions similaires

  1. [XL-2010] Lier des segments qui ne partagent pas la même source
    Par pedrolapercu dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/06/2018, 15h34
  2. [XL-2010] Lier des segments qui ne partagent pas la même source
    Par sanae430 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 03/08/2013, 10h07
  3. Allocation dans un segment de mémoire partagé
    Par Malek_moly dans le forum C
    Réponses: 7
    Dernier message: 23/04/2012, 21h24
  4. Segment de mémoire partagée POSIX, socket et select
    Par Antoine J. dans le forum POSIX
    Réponses: 2
    Dernier message: 06/12/2011, 17h42
  5. Segment de mémoire partagé
    Par dedibox26 dans le forum Débuter
    Réponses: 3
    Dernier message: 13/05/2010, 01h18

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