ipc 메시지 큐 예제

다른 데이터 패킷과 통신하려는 경우 프로세스 A가 B를 처리하는 메시지 유형 1, C를 처리하는 메시지 유형 10, D를 처리하는 메시지 유형 20을 전송하는 경우를 말합니다. 이 경우 메시지 큐를 사용하여 구현하는 것이 시급합니다. 지정된 메시지 유형을 1, 10, 20으로 단순화하려면 아래에 설명된 대로 0 또는 +ve 또는 -ve일 수 있습니다. MT-Safe 값(다중 스레드용 MT 포함)은 mq_open 함수가 스레드 안전성을 의미하며, 이는 프로세스 안전성을 의미합니다. 동일한 프로세스에서 이러한 조건은 다른 프로세스의 스레드 간에 발생할 수 없습니다. MT-Safe 특성은 mq_open 호출에서 경합 조건이 발생하지 않음을 보장합니다. 일반적으로 채널 기반 IPC는 동시 안전하지만 다음 예제에서는 주의 사항도 제기됩니다. msgctl을 사용하면 msqid로 식별된 메시지 큐에서 제어 작업을 수행할 수 있습니다. cmd 매개 변수는 수행할 작업을 식별합니다.

cmd값은 IPC_RMID, IPC_STAT 및 IPC_SET일 수 있습니다. cmd가 IPC_RMID이면 메시지 큐가 제거됩니다. cmd 값 IPC_STAT는 buf가 가리키는 msqid_ds 구조의 메시지 큐에 대한 커널 정보를 전송합니다. 마찬가지로 cmd 값 IPC_SET은 buf가 가리키는 msqid_ds 구조에서 큐에 대한 커널의 메시지 큐 속성을 업데이트합니다. 업데이트된 큐 속성은 msg_qbytes, msg_perm.uid, msg_perm.gid 및 msg_perm.mode의 마지막 9비트입니다. 큐에 대한 msg_ctime 값도 업데이트됩니다. 예를 들어 System V 메시지 큐를 사용하여 통신하는 서버와 클라이언트를 개발합니다. 서버는 클라이언트의 요청을 수신합니다. 클라이언트는 서버에 텍스트 줄을 보냅니다.

서버는 수신된 줄의 문자 수를 계산하고 줄에 카운트를 더한 다음 클라이언트로 다시 보냅니다. 실제 상황에서 서버는 더 유용한 서비스를 제공합니다. 그러나 우리의 목표는 메시지 큐를 사용하여 서버와 클라이언트 간의 통신을 설명하는 것이며 서버 기능은 뒷좌석을 차지합니다. 소프트웨어 아키텍처는 다음과 같습니다. 1 단계 – 두 개의 프로세스를 만들기, 하나는 메시지 큐 (msgq_send.c)로 전송하고 다른 하나는 메시지 큐 (msgq_recv.c)에서 검색하기위한 것입니다 세 번째 인수, msgsz, 수신 된 메시지의 크기입니다 (메시지는 null 문자로 끝나야) 물론 . 중요한 인수는 msgctl() 행동 방법을 알려주는 cmd입니다. 그것은 다양 한 것 들 수 있습니다., 하지만 우리는 단지 IPC_RMID에 대 한 이야기 거 야, 메시지 큐를 제거 하는 데 사용 되는.