Eu fiz algumas pesquisas sobre este tema, mas eu não entendi muito bem.
De msgsnd man page
:
A chamada de sistema msgsnd() anexa uma cópia da mensagem apontada por msgp à fila de mensagens cujo identificador é especificado por msqid.
Isso significa que quando eu uso a msgget
para criar uma fila de mensagens, Enqueue e Dequeue acontecem automaticamente com msgsnd
e msgrcv
?
Por exemplo, se eu quiser usar uma fila de mensagens que pode conter N mensagens simultaneamente, quando eu uso msgsnd
eu coloco uma mensagem na fila e quando eu uso msg rcv
eu pego daqui e apago essa mensagem?
Se for esse o caso, não devo implementar enfileirar e desenfileirar manualmente para criar uma lista de N mensagens porque basta definir um valor para const void *msgp
adicionar int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
mais uma mensagem na fila e basta que ela seja recebida por msgrcv
para ser excluída de a fila senão fica na fila até ser recebido por algum processo, estou correto?
Mas então quantas mensagens esta fila pode conter se não for eu quem defini quantas podem ser contidas?
De acordo com man2(msgrcv) , as operações de enfileirar/desenfileirar são tratadas internamente pela API systemV. para que você não precise reimplementá-los, basta usar a API fornecida.
Para atributos de fila de mensagens, use msgctl com o comando IPC_INFO.