[contact-form-7 404 "Not Found"]

Fique informado sobre as principais tendências em energias renováveis. Deixe seu e-mail e receba nossos conteúdos.

Sem categoria

mq_open 예제

아래 예제에서는 Linux에서 POSIX 메시지 큐를 사용하여 서버와 클라이언트 간의 프로세스 간 통신을 보여 줍니다. 서버는 항공편의 좌석 번호또는 이와 유사한 토큰 번호를 관리합니다. 요청 시 클라이언트에 토큰 번호를 제공하는 것은 서버의 작업입니다. 일반적인 시나리오에서는 서버에 토큰 번호를 요청하는 클라이언트가 여러 개 있을 수 있습니다. 서버의 메시지 큐 이름은 클라이언트에 알려져 있습니다. 각 클라이언트에는 서버가 응답을 게시하는 자체 메시지 큐가 있습니다. 클라이언트가 요청을 보내면 해당 메시지 큐 이름을 보냅니다. 서버는 클라이언트의 메시지 큐를 열고 응답을 보냅니다. 클라이언트는 메시지 큐에서 응답을 선택하고 해당 클라이언트의 토큰 번호를 읽습니다. 프로세스 아키텍처는 다음과 같습니다.

다음 예제에서는 큐에서 메시지를 검색하기 위한 표준 방법을 보여 줍니다. 메시지를 수신하기 위한 msg_len 매개 변수는 특별한 주의가 필요합니다. mq_send()에 이 매개 변수를 사용하는 것은 직관적이며 write() 및 strncpy(와 같은 함수의 동작)와 일치합니다: msg_len은 전송될 msg_ptr로 식별된 문자열의 최대 문자 수를 지정합니다. 그러나 메시지를 받을 때 msg_len 메시지의 크기와 일치 해야 합니다. 따라서 표준 접근 방식은 mq_getattr()을 사용하고 반환된 구조mq_attr의 mq_msgsize 필드에 액세스하는 것입니다. mq_open() 함수가 실패하면 errno가 다음 값 중 하나로 설정될 수 있습니다. 예제 프로그램이 두 번째로 실행될 때 다음이 생성되어야 합니다. 다른 노드의 Mqueue 서버에 연결하려면 그에 따라 MQ_NODE 환경 변수를 설정합니다. mq_open() 스텁은 이 변수를 검사하여 서버를 검색할 노드를 결정합니다.

자세한 내용은 QNX 유틸리티 참조를 참조하십시오. 다음은 클라이언트에서 중지하라는 “종료” 메시지를 받을 때까지 클라이언트로부터 메시지를 수신하는 서버의 간단한 예입니다. O_CREAT을 oflag의 일부로 지정하면 큐가 이미 존재하지 않는 경우 큐가 만들어집니다. O_CREAT과 함께 O_EXCL을 지정하고 큐가 존재하는 경우 errno를 EEXIST로 설정하여 mq_open이 실패합니다.