알림이 NULL이 아닌 경우 mq_notify()는 메시지가 지정된 메시지 큐에 도착할 때 알림을 받을 호출 프로세스를 등록합니다. 메시지가 큐에 도착하면(즉, 큐가 더 이상 비어 있지 않음) 지정된 알림이 호출 프로세스로 전송됩니다. 메시지 큐에서 알림을 위해 한 번에 하나의 프로세스만 등록할 수 있습니다. 지정된 메시지 큐에서 알림에 등록된 프로세스(호출 프로세스 포함)가 완료되면 해당 큐에 대한 추가 등록 시도가 실패합니다. 알림은 한 번 발생합니다: 알림이 배달된 후 알림 등록이 제거되고 다른 프로세스가 메시지 알림에 등록할 수 있습니다. 알림 프로세스가 다음 알림을 수신하고자 하는 경우 mq_notify()를 사용하여 추가 알림을 요청할 수 있습니다. 큐에서 읽지 않은 모든 메시지를 비우기 전에 이 작업을 수행해야 합니다. (비차단 모드로 큐를 배치하면 비워지면 차단하지 않고 메시지 큐를 비우는 데 유용합니다.) 프로그램이 빈 큐에 쓴 후 큐가 비어 있는 큐에서 비빈으로 전환되었다는 신호가 표시되었습니다. 예제 프로그램이 두 번째로 실행될 때 는 다음을 생성해야 합니다. 예제 프로그램이 처음 실행될 때 출력은 다음과 같이 되어야 합니다.

mq_notify()가 호출될 때 큐가 비어 있지 않은 경우 큐가 비워지고 새 메시지가 도착한 후에만 알림이 발생합니다. 아래 예제에서는 Linux에서 POSIX 메시지 큐를 사용하여 서버와 클라이언트 간의 프로세스 간 통신을 보여 줍니다. 서버는 항공편의 좌석 번호또는 이와 유사한 토큰 번호를 관리합니다. 요청 시 클라이언트에 토큰 번호를 제공하는 것은 서버의 작업입니다. 일반적인 시나리오에서는 서버에 토큰 번호를 요청하는 클라이언트가 여러 개 있을 수 있습니다. 서버의 메시지 큐 이름은 클라이언트에 알려져 있습니다. 각 클라이언트에는 서버가 응답을 게시하는 자체 메시지 큐가 있습니다. 클라이언트가 요청을 보내면 해당 메시지 큐 이름을 보냅니다.

서버는 클라이언트의 메시지 큐를 열고 응답을 보냅니다. 클라이언트는 메시지 큐에서 응답을 선택하고 해당 클라이언트의 토큰 번호를 읽습니다. 프로세스 아키텍처는 다음과 같습니다. sevp가 NULL이 아닌 포인터인 경우 mq_notify()는 메시지 알림을 수신하기 위해 호출 프로세스를 등록합니다. sevp 포인트가 알림을 수행하는 방법을 지정하는 sigevent 구조의 sigev_notify 필드입니다. 이 필드에는 다음 값 중 하나가 있습니다. 다음 코드를 참조하십시오: int mq_notify(mqd_t mqdes, 구성 구조체 sigevent *알림); mq_notify() 함수는 메시지 큐 설명자mqdes에서 식별한 지정된 메시지 큐에 도착하는 메시지에 대해 호출 프로세스에 대한 알림을 받는지 여부를 제어합니다.

 

Comments are closed.

Set your Twitter account name in your settings to use the TwitterBar Section.