next up previous
Next: A Função shmctl() Up: A Função shmget() Previous: Estrutura associada a uma

Como criar um segmento de memória compartilhada

O procedimento é exatamente o mesmo que aquele empregaado para gerar um conjunto de semáforos (seção 5.3). As seguintes regras gerais devem ser entretanto observadas:

Note finalmente que durante a criação do segmento de memória compartilhada, um certo número de membros da estrutura shmid_ds serão também inicializados (por exemplo, o proprietário, os modos de acesso, a data de criação, etc). Faça man shmget para maiores detalhes.

Exemplo de utilização de shmget

Este programa cria um segmento de memória compartilhada associado à chave 123.

/* fichier test_shmget.c */ 
/* exemplo de utilizacap de shmget() */

#include <errno.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>

#define KEY 123

int main()
{
  int shmid ;  /* identificador da memoria comum */
  int size = 1024 ;
  char *path="nome_de_arquivo_existente" ;
     
     if (( shmid = shmget(ftok(path,(key_t)KEY), size,
                    IPC_CREAT|IPC_EXCL|SHM_R|SHM_W)) == -1) {
          perror("Erro no shmget") ;
          exit(1) ;
     }
     printf("Identificador do segmento: %d \n",shmid) ;
     printf("Este segmento e associado a chave unica: %d\n",
                   ftok(path,(key_t)KEY)) ;
     exit(0);
}

Resultado da execução:

Lançando duas vezes a execução do programa, tem-se o seguinte resultado:

euler:~> test_shmget
Identificador do segmento: 36096 
Este segmento e associado a chave unica: 2063804629
euler:~> ipcs -m

------ Shared Memory Segments --------
key       shmid     owner     perms     bytes     nattch    status      
0x7b0328d5 36096     saibel    600       1024      0                     

euler:~> test_shmget
Erro no shmget: File exists


next up previous
Next: A Função shmctl() Up: A Função shmget() Previous: Estrutura associada a uma
Celso Alberto Saibel Santos 2000-11-14