NOME
ipc − Mecanismo de inter-comunicação do System V
SINOPSE
# include
<sys/types.h>
# include <sys/ipc.h>
# include <sys/msg.h>
# include <sys/sem.h>
# include <sys/shm.h>
DESCRIÇÃO
Esta página do manual referese a implementação para o Linux do mecanismo de inter-comunicação usado no System V: fila de mensagens, sinalização por semáfaros e segmentos compartilhados de memória. Na seqüencia, a palavra resource significa uma instância de um entre muitos mecanismos.
Permissão
de Acessos aos Recursos
Para cada recurso o sistema usa uma estrutura comum do tipo
struct ipc_perm para armazernar
informações necessárias na
determincação das permissões para
executar uma operação ipc. A estrutura
ipc_perm , definida pelo arquivo de cabeçalho
do sistema <sys/ipc.h> , incluí os
seguintes membros:
ushort cuid;
/* identificação numérica do usuário criador*/
ushort cgid;
/* identificação numérica do grupo criador*/
ushort uid; /* identificação numérica do usuário proprietário*/
ushort gid; /* identificação numérica do grupo proprietário*/
ushort mode; /* r/w permissões */
O modo membro da estrutura ipc_perm determina, com ele abaixo de 9 bits, a permissão de acesso para o recurso para um processo executando uma chamada de sistema ipc. As permissões são interpretadas como segue:
0400
Leitura pelo usuário.
0200
Escrita pelo usuário.
0040
Leitura pelo grupo.
0020
Escrita pelo grupo.
0004
Leitura pelos demais.
0002
Escrita pelos demais.
Os bits 0100, 0010 e 0001 (os bits para execução) não são usados pelo sistema. Furthermore "escrita" significa efetivamente "modificar" para um conjunto de sinalizações.
O arquivo cabeçalho de sistema define as seguintes constantes simbólicas:
IPC_CREAT
Criar a entrada se a chave não existe.
IPC_EXCL
Falhar se a chave existe.
IPC_NOWAIT
Errar se a requesição esperar muito.
IPC_PRIVATE
Chave privada.
IPC_RMID
Remover recurso.
IPC_SET
Fixar opção do recurso.
IPC_STAT
Pegar opção do recurso.
Note que IPC_PRIVATE é um tipo key_t , enquanto todos as outras constantes simbólicas são campos flag ou-hábil dentro de uma variável tipo int
Fila de
mensagens
Uma fila de mensagens é unicamente identificada por
un inteiro positivo (its msqid) e possui uma
estrutura de dados associada do tipo struct
msquid_ds, definida em <sys/msg.h>,
contendo os seguintes membros:
struct
ipc_perm msg_perm;
ushort msg_qnum; /* nada de mensagens na fila */
ushort msg_qbytes; /* máximo de bytes na fila */
ushort msg_lspid; /* pid da última chamada msgsnd
*/
ushort msg_lrpid; /* pid da última chamada msgrcv
*/
time_t msg_stime; /* última hora de msgsnd */
time_t msg_rtime; /* última hora de msgrcv */
time_t msg_ctime; /* úlitma hora de
alteração */
msg_perm
ipc_perm estruturas que especificam a permissão de acesso na fila de mensagem.
msg_qnum
Número de mensagems atualmente na fila de mensagens.
msg_qbytes
Número máximo de bytes de texto de mensagem texto permetida na fila de mensagens.
msg_lspid
ID do processo que executou a última chamada de sistema msgsnd
msg_lrpid
ID do processo que executou a última chamada de sistema msgrcv
msg_stime
A hora da última chamada de sistema msgsnd
msg_rtime
A hora da última chamada de sistema msgcv
msg_ctime
A hora da última chamada de sistema que alterou um membro da estrutura msqid_ds
Conjunto
sinalizador
Um conjunto sinalizador é unicamente identificado por
um inteiro positivo (its semid) e possui uma
estrutura de dados associada do tipo struct semid_ds,
definida em <sys/sem.h>, contendo os seguintes
membros:
struct
ipc_perm sem_perm;
time_t sem_otime; /* tempo da última
operação */
time_t sem_ctime; /* tempo da última
alteração */
ushort sem_nsems; /* contagem de sems no conjunto */
sem_perm
ipc_perm estruturas que especificam a permissão de acesso no conjunto sinalizador.
sem_otime
Hora da última chamada de sistema semop
sem_ctime
Hora da última chamada de sistema semctl que alterou um membro de uma estrutura citada acima ou um dos sinais pertencentes ao conjunto.
sem_nsems
Número de sinais no conjunto. Cada sinal de um conjunto é referenciado por um inteiro não negativo desde 0 até sem_nsems−1.
Um sianl é uma estrutura de dados do tipo struct sem contendo os seguintes membros:
ushort
semval; /* valor do sinal */
short sempid; /* pid para a última
operação */
ushort semncnt; /* número de espera semval para
adicionar */
ushort semzcnt; /* número de espera semval = 0
*/
semval
Valor do sinal: um interio não negativo.
sempid
ID do último processo que executou uma operação sinalizada neste sinal.
semncnt
Número de processos supendidos aguardando por semval para adicionar.
semznt
Número de processos supendidos aguardando por semval para se transformar em zero.
Segmentos
Compartilhados de Memória
Um segmento compartilhado de memória é
unicamente identificado por um inteiro positivo (its
shmid) e possui uma estrutura de dados associada do
tipo struct shmid_ds, definida em
<sys/shm.h>, contendo os seguintes membros:
struct
ipc_perm shm_perm;
int shm_segsz; /* tamanho do segmento */
ushort shm_cpid; /* pid do criador */
ushort shm_lpid; /* pid, da última
operação */
short shm_nattch; /* número atual de
uniões */
time_t shm_atime; /* hora da última união
*/
time_t shm_dtime; /* hora da úlitma
desunião */
time_t shm_ctime; /* hora da úlitma
alteração */
shm_perm
ipc_perm estrutura que especifica as permissões de acesso no segmento compartilhado de memória.
shm_segsz
Tamanho em bytes do segmento compartilhado de memória.
shm_cpid
ID do processo que criou o segmento compartilhado de memória
shm_lpid
ID do úlitmo processo que executou uma chamada de sistema shmat ou shmdt
shm_nattch
Número de uniões atuais ativas para este segmento compartilhado de memória.
shm_atime
Hora da úlitma chamada de sistema shmat
shm_dtime
Hora da úlitma chamada de sistema shmdt
shm_ctime
Hora da última chamada de sistema shmctl que alterou shmid_ds.
VEJA TAMBÉM
ftok(3), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmget(2), shmdt(2).
TRADUZIDO POR LDP-BR em 21/08/2000.
André L. Fassone Canova <lonelywolf [AT] blv.br> (tradução) Carlos Augusto Horylka <horylka [AT] conectiva.br> (revisão)