O kernel do Linux (2.6) implementa duas filas de mensagens: (em vez de 'listas de mensagens', pois a implementação é feita usando uma lista vinculada que não segue rigorosamente o princípio FIFO)
Mensagens do sistema V IPC
A fila de mensagens do sistema V.
Um processo pode ser chamado msgsnd()para enviar uma mensagem. Ele precisa passar o identificador IPC da fila de mensagens receptoras, o tamanho da mensagem e uma estrutura de mensagens, incluindo o tipo e o texto da mensagem.
Por outro lado, um processo chama msgrcv()para receber uma mensagem, passando o identificador IPC da fila de mensagens, onde a mensagem deve ser armazenada, o tamanho e o valor t .
t especifica a mensagem retornada da fila, um valor positivo significa que a primeira mensagem com seu tipo igual a t é retornada, um valor negativo retorna a última mensagem igual ao tipo t e zero retorna a primeira mensagem da fila.
Existem limitações quanto ao tamanho de uma mensagem (máximo), ao número total de mensagens (mni) e ao tamanho total de todas as mensagens na fila (mnb):
Respostas:
O kernel do Linux (2.6) implementa duas filas de mensagens:
(em vez de 'listas de mensagens', pois a implementação é feita usando uma lista vinculada que não segue rigorosamente o princípio FIFO)
Mensagens do sistema V IPC
A fila de mensagens do sistema V.
Um processo pode ser chamado
msgsnd()
para enviar uma mensagem. Ele precisa passar o identificador IPC da fila de mensagens receptoras, o tamanho da mensagem e uma estrutura de mensagens, incluindo o tipo e o texto da mensagem.Por outro lado, um processo chama
msgrcv()
para receber uma mensagem, passando o identificador IPC da fila de mensagens, onde a mensagem deve ser armazenada, o tamanho e o valor t .t especifica a mensagem retornada da fila, um valor positivo significa que a primeira mensagem com seu tipo igual a t é retornada, um valor negativo retorna a última mensagem igual ao tipo t e zero retorna a primeira mensagem da fila.
Essas funções são definidas em include / linux / msg.he implementadas em ipc / msg.c
Existem limitações quanto ao tamanho de uma mensagem (máximo), ao número total de mensagens (mni) e ao tamanho total de todas as mensagens na fila (mnb):
A saída acima é de um sistema Ubuntu 10,10, os defaults são definidos em msg.h .
Coisas da fila de mensagens System V incrivelmente antigas, explicadas aqui .
Fila de mensagens POSIX
O padrão POSIX define um mecanismo da fila de mensagens com base na fila de mensagens do System V IPC, estendendo-o por algumas funcionalidades:
Consulte ipc / mqueue.c
Exemplo
util-linux
fornece alguns programas para analisar e modificar filas de mensagens e a especificação POSIX fornece alguns exemplos em C:Crie uma fila de mensagens com
ipcmk
; geralmente você faria isso chamando funções C comoftok()
emsgget()
:Vamos ver o que aconteceu usando
ipcs
ou com umcat /proc/sysvipc/msg
:Agora preencha a fila com algumas mensagens:
Novamente, você geralmente não codifica o msqid no código.
E o outro lado, que receberá as mensagens:
Veja o que acontece:
Após dois recebimentos, a fila está vazia novamente.
Remova-o posteriormente, especificando a chave (
-Q
) ou msqid (-q
):fonte