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