sub-rotina msgctl

Propósito

Fornece operações de controle de mensagens.

Biblioteca

Biblioteca C Padrão (libc.a)

Sintaxe

#include <sys/msg.h>

int msgctl (MessageQueueID,Command,Buffer)
int  MessageQueueID,  Command;
struct msqid_ds * Buffer;

Descrição

O subroutine msgctl fornece uma variedade de operações de controle de mensagens conforme especificado pelo parâmetro Command e armazenado na estrutura apontada pelo parâmetro Buffer . A estrutura msqid_ds é definida no arquivo sys/msg.h ..

Os seguintes limites se aplicam à fila de mensagens:

  • O tamanho máximo da mensagem é de 4 Megabytes.
  • Número máximo de mensagens por fila é 524288.
  • Número máximo de IDs de fila de mensagens é 1048576.
  • Número máximo de bytes em uma fila é controlado pelo parâmetro ajustável ipc_msgmnb do comando vmo .

Parâmetros

Item Descrição
MessageQueueID Especifica o identificador da fila de mensagens.
Comando Os seguintes valores para o parâmetro Command estão disponíveis:
IPC_STAT
Armazena o valor atual dos campos acima da estrutura de dados associada ao parâmetro MessageQueueID na estrutura msqid_ds apontada pelo parâmetro Buffer.

O processo atual deve ter permissão de leitura, a fim de realizar esta operação.

IPC_SET
Define o valor dos seguintes campos da estrutura de dados associada ao parâmetro MessageQueueID para os valores correspondentes encontrados na estrutura apontada pelo parâmetro Buffer:
msg_perm.uid
msg_perm.gid
msg_perm.mode/*Only the low-order 
nine bits*/
msg_qbytes

O ID do usuário efetivo do processo atual deve ter autoridade de usuário root ou deve ser igual o valor do msg_perm.uidoumsg_perm.cuidna estrutura de dados que está associada ao parâmetro MessageQueueID para executar essa operação. Para aumentar o valor do campo msg_qbytes , o ID do usuário efetivo do processo atual deve ter autoridade de usuário root.

IPC_RMID
Remove do sistema o identificador da fila de mensagens especificado pelo parâmetro MessageQueueID e destrói a fila de mensagens e a estrutura de dados associadas a ela. O ID do usuário efetivo do processo atual deve ter autoridade de usuário root ou ser igual ao valor domsg_perm.uidoumsg_perm.cuidna estrutura de dados associada ao parâmetro MessageQueueID para executar essa operação.
de Saída Aponta para uma estrutura msqid_ds .

Valores De Retorno

Após a conclusão bem-sucedida, a subroutine msgctl retorna um valor de 0. Caso contrário, um valor de -1 é retornado e a variável global errno é definida para indicar o erro.

Códigos De Erro

A subroutine msgctl não é bem-sucedida se qualquer uma das seguintes condições for verdadeira:

Item Descrição
EINVAL O parâmetro Command ou MessageQueueID não é válido.
EACCES O parâmetro Command é igual ao valor IPC_STAT , e o processo de chamada foi negado permissão de leitura.
EPERM O parâmetro Command é igual ao valor IPC_RMID e o ID do usuário efetivo do processo de chamada não tem autoridade de usuário root. Ou, o parâmetro Command é igual ao valor IPC_SET , e o ID do usuário efetivo do processo de chamada não é igual ao valor domsg_perm.uidcampo ou omsg_perm.cuidna estrutura de dados associada ao parâmetro MessageQueueID.
EPERM O parâmetro Command é igual ao valor IPC_SET , uma tentativa foi feita para aumentar o valor domsg_qbytescampo, e o ID do usuário efetivo do processo de chamada não possui autoridade de usuário root.
EFAULT Os pontos de parâmetro Buffer fora do espaço de endereço do processo.