IPC(5) | Manual do Programador Linux | IPC(5) |
ipc - Mecanismo de inter-comunicação do System V
# include <sys/types.h> # include <sys/ipc.h> # include <sys/msg.h> # include <sys/sem.h> # include <sys/shm.h>
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.
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:
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
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
*/
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 */
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 */
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
*/
ftok(3), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmget(2), shmdt(2).
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 |