table of contents
IPC(5) | Manual do Programador Linux | IPC(5) |
NOME¶
ipc - Mecanismo de inter-comunicação do System VSINOPSE¶
# 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@blv.com.br> (tradução) Carlos Augusto Horylka <horylka@conectiva.com.br> (revisão)1/11/1993 | Linux 0.99.13 |