SVIPC(7) | Manual do Programador do Linux | SVIPC(7) |
NOME¶
svipc - mecanismo de inter-comunicação do System V
SINOPSE¶
#include <sys/msg.h> #include <sys/sem.h> #include <sys/shm.h>
DESCRIÇÃO¶
This manual page refers to the Linux implementation of the System V interprocess communication (IPC) mechanisms: message queues, semaphore sets, and shared memory segments. In the following, the word resource means an instantiation of one among such mechanisms.
Permissão de acessos aos recursos¶
For each resource, the system uses a common structure of type struct ipc_perm to store information needed in determining permissions to perform an IPC operation. The ipc_perm structure includes the following members:
struct ipc_perm {
uid_t cuid; /* creator user ID */
gid_t cgid; /* creator group ID */
uid_t uid; /* owner user ID */
gid_t gid; /* owner group ID */
unsigned short mode; /* r/w permissions */ };
O modo membro da estrutura ipc_perm determina, com os 9 bits menores, 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 Read by user.
0200 Write by user.
0040 Read by group.
0020 Write by group.
0004 Read by others.
0002 Write by others.
Os bits 0100, 0010 e 0001 (os bits para execução) não são usados pelo sistema. Em qualquer caso "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
- Devolver um erro se a requesição esperar muito.
- IPC_PRIVATE
- Chave privada.
- IPC_RMID
- Remover recurso.
- IPC_SET
- Selecionar uma opção do recurso.
- IPC_STAT
- Obter opção do recurso.
Note that IPC_PRIVATE is a key_t type, while all the other symbolic constants are flag fields and can be OR'ed into an int type variable.
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 msqid_ds {
struct ipc_perm msg_perm;
msgqnum_t msg_qnum; /* no of messages on queue */
msglen_t msg_qbytes; /* bytes max on a queue */
pid_t msg_lspid; /* PID of last msgsnd(2) call */
pid_t msg_lrpid; /* PID of last msgrcv(2) call */
time_t msg_stime; /* last msgsnd(2) time */
time_t msg_rtime; /* last msgrcv(2) time */
time_t msg_ctime; /* last change time */ };
- 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(2).
- msg_lrpid
- ID do processo que executou a última chamada de sistema msgrcv(2).
- msg_stime
- A hora da última chamada de sistema msgsnd(2).
- msg_rtime
- A hora da última chamada de sistema msgrcv(2).
- 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 semid_ds {
struct ipc_perm sem_perm;
time_t sem_otime; /* last operation time */
time_t sem_ctime; /* last change time */
unsigned long sem_nsems; /* count of sems in set */ };
- sem_perm
- ipc_perm estruturas que especificam a permissão de acesso no conjunto sinalizador.
- sem_otime
- Hora da última chamada de sistema semop(2).
- sem_ctime
- Hora da última chamada de sistema semctl(2) 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 sinal é uma estrutura de dados do tipo struct sem contendo os seguintes membros:
struct sem {
int semval; /* semaphore value */
int sempid; /* PID of process that last modified */ };
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 shmid_ds {
struct ipc_perm shm_perm;
size_t shm_segsz; /* size of segment */
pid_t shm_cpid; /* PID of creator */
pid_t shm_lpid; /* PID, last operation */
shmatt_t shm_nattch; /* no. of current attaches */
time_t shm_atime; /* time of last attach */
time_t shm_dtime; /* time of last detach */
time_t shm_ctime; /* time of last change */ };
- 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(2) ou shmdt(2).
- 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(2).
- shm_dtime
- Time of the last shmdt(2) system call.
- shm_ctime
- Time of the last shmctl(2) system call that changed shmid_ds.
IPC namespaces¶
For a discussion of the interaction of System V IPC objects and IPC namespaces, see namespaces(7).
VEJA TAMBÉM¶
ipcmk(1), ipcrm(1), ipcs(1), lsipc(1), ipc(2), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmdt(2), shmget(2), ftok(3), namespaces(7)
COLOFÃO¶
Esta página faz parte da versão 4.16 do projeto Linux man-pages. Uma descrição do projeto, informações sobre relatórios de bugs e a versão mais recente desta página podem ser encontradas em https://www.kernel.org/doc/man-pages/.
TRADUÇÃO¶
A tradução para português brasileiro desta página man foi criada por André Luiz Fassone <lonely_wolf@ig.com.br> e Carlos Augusto Horylka <horylka@conectiva.com.br>
Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.
Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores.
15 março 2016 | Linux |