나는 이 주제에 대해 몇 가지 조사를 해봤지만 잘 이해가 되지 않습니다.
에서 msgsnd man page
:
msgsnd() 시스템 호출은 msgp가 가리키는 메시지의 복사본을 msqid로 지정된 식별자의 메시지 큐에 추가합니다.
msgget
이는 를 사용하여 메시지 대기열을 생성할 때 및 를 사용하여 대기열에 추가 및 대기열에서 제거가 자동으로 발생한다는 의미 입니까 msgsnd
?msgrcv
예를 들어, N개의 메시지를 동시에 보유할 수 있는 메시지 대기열을 사용하려는 경우 이를 사용할 때 msgsnd
메시지를 대기열에 넣고, 사용할 때 msg rcv
여기에서 가져오고 메시지를 삭제합니까?
이 경우 N개 메시지 목록을 생성하기 위해 대기열에 넣기 및 대기열에서 빼기를 수동으로 구현하면 안 됩니다. 왜냐하면 const void *msgp
from으로 값을 설정하는 것만으로도 대기열에 메시지를 추가하기에 충분하고 , 그렇지 않으면 삭제에서 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
메시지를 받기에 충분하기 때문입니다. msgrcv
일부 프로세스가 이를 수신할 때까지 대기열에 남아 있을 것입니다. 그렇죠?
하지만 내가 포함할 수 있는 메시지 수를 설정하는 유일한 사람이 아니라면 이 대기열에 얼마나 많은 메시지를 포함할 수 있습니까?
답변1
~에 따르면man2(msgrcv)큐에 넣기/큐에서 빼기 작업은 systemV API에 의해 내부적으로 처리됩니다. 따라서 다시 구현할 필요가 없으며 제공된 API를 사용하면 됩니다.
메시지 대기열 속성의 경우메시지 제어IPC_INFO 명령을 사용하십시오.