mq_notify 예제
알림이 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에서 식별한 지정된 메시지 큐에 도착하는 메시지에 대해 호출 프로세스에 대한 알림을 받는지 여부를 제어합니다.