Créer de la mémoire partagée entre processus

Problème

Vous souhaitez allouer de la mémoire qui soit accessible depuis d’autres processus. 

Solution

Utilisez les fonctions de communication interprocessus (IPC) shmget(), shmat(), shmdt() et éventuellement shmop().

Discussion

La mémoire partagée s’obtient en deux étapes. L’une consiste à la réserver si elle ne l’est pas déjà, et à obtenir son identifiant. Utilisez shmget() pour cela. L’autre attache le segment de mémoire partagée au segment de mémoire du processus avec shmat(). Voici un exemple qui utilise ftok() afin d’obtenir ou allouer de la mémoire partagée correspondant à un nom de fichier et un nom de projet :


int shmid = -1; 
 
int 
shm_init (char *filename, char project_id, int size) 
{ 
/* Crée un jeu de 1 segment de mémoire partagée */ 
  if (-1 == shmid) 
    { 
      key_t key; 
      shmid = shmget (key = ftok (filename, project_id), size, 0600); 
      if (-1 == shmid) 
        {                     /* Le segment de mémoire partagée 
                               * n'existe pas ou est inutilisable. */ 
          shmid = shmget (k, size, IPC_CREAT | 0600); 
          if (-1 == shmid) 
            {                 /* Le segment de mémoire partagée  
                               * n'a pas pu être créé. */ 
              fprintf (stderr, "Impossible de créer le segment de " 
                        "mémoire partagée...
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Tracer les allocations de mémoire
Suivant
Introduction