Lidando com várias mensagens na fila de mensagens

0

Eu fiz algumas pesquisas sobre esse assunto, mas não entendi muito bem.

De msgsnd man page :

The msgsnd() system call appends a copy of the message pointed to by msgp to the message queue whose identifier is specified by msqid.

Isso significa que quando eu uso um msgget para criar uma fila de mensagens, o Enfileirar e Desenfileirar acontece automaticamente com msgsnd e msgrcv ?

Por exemplo, se eu quiser usar uma fila de mensagens que possa armazenar simultaneamente N mensagens, quando eu usar msgsnd i colocar uma mensagem na fila e quando eu usar msg rcv i, pegue-a daqui e apague essa mensagem ?

Se esse for o caso, eu não deveria implementar manualmente enfileirar e desenfileirar para criar uma lista de N mensagens porque é suficiente definir um valor para const void *msgp de int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); para adicionar mais uma mensagem na fila e é suficiente que isso é recebido por msgrcv para ser excluído da fila, caso contrário ele permanece na fila até que seja recebido por algum processo, estou correto?

Mas quantas mensagens essa fila pode conter, se eu não for a única a definir quantas podem ser contidas?

    
por Zeno Raiser 04.01.2018 / 15:55

1 resposta

1

De acordo com as man2 (msgrcv) as operações de enfileiramento / retirada de fila são tratadas internamente pela API systemV. para que você não precise reimplementá-los, basta usar a API fornecida.

Para os atributos da fila de mensagens, use msgctl com o comando IPC_INFO.

    
por 22.02.2018 / 12:02

Tags