mq_open 예제
다른 POSIX IPC 오픈 함수와 마찬가지로 mq_open()에는 oflag 및 모드 매개 변수가 모두 포함됩니다. 또한 네 번째 매개 변수(attr)는 메시지 크기 또는 큐 용량과 같은 메시지 큐에 대한 특성을 지정하는 데 사용됩니다. mq_open() 호출에는 정확히 2개 또는 4개의 매개 변수가 있어야 합니다. 새 메시지 큐를 만들 때 모드 및 attr 매개 변수를 모두 포함해야 합니다. 기존 메시지 큐에 대한 연결을 열 때 이러한 매개 변수는 모두 생략됩니다. 메시지 큐를 설정할 때 시스템 기본값을 사용하려면 NULL을 mq_open()에 네 번째 매개 변수로 전달합니다. 다음 코드 코드 조각은 쓰기를 위한 메시지 큐를 만들고 간단한 메시지를 보냅니다. mq_open 함수는 POSIX 큐를 여는 것입니다. 첫 번째 매개 변수는 위의 이전 단락에 설명된 큐 이름을 지정합니다. 두 번째 매개 변수는 메시지를 수신하기 위한 O_RDONLY, 메시지를 보내기 위한 O_WRONLY, 큐에서 의 송신 및 수신 작업에 대한 O_RDWR이 될 수 있는 플래그입니다. 이 플래그에 더 많은 값이 OR`ed일 수 있습니다. O_NONBLOCK을 지정하여 비차단 모드에서 큐를 사용할 수 있습니다.
기본적으로 mq_send는 큐가 가득 찼을 때 차단되고 mq_receive는 큐에 메시지가 없는 경우 차단합니다. 그러나 O_NONBLOCK이 oflag에 지정되면 해당 경우 errno가 EAGAIN로 설정된 즉시 호출이 반환됩니다. 프로그램이 빈 큐에 쓴 후 큐가 비어 있는 큐에서 비빈으로 전환되었다는 신호가 표시되었습니다. 예제 프로그램이 실행되는 두 번째 시간, 다음이 생성되어야 합니다: mq_open() 함수가 실패하면 errno가 다음 값 중 하나로 설정될 수 있습니다. mq_open 호출이 성공하면 메시지 큐 설명자가 반환됩니다. 메시지 큐 설명자는 큐에 대한 후속 호출에 사용할 수 있습니다. gcc queue_example_threads.c-o queue_example_threads -lrt-lpthread를 컴파일하여 위의 것을 컴파일합니다. 시스템 V 메시지 큐는 더 작은 함수 집합을 사용하지만 기능이 적습니다. msgget()은 POSIX mq_open() 함수와 동일한 시스템 V입니다.
시스템 V IPC 개체는 key_t 정수 값으로 식별됩니다. 키를 설정하기 위한 두 가지 표준 방법은 ftok()를 사용하여 고유 키를 생성하거나 IPC_PRIVATE을 msgget() (고유 키를 보장)에 전달하는 것입니다. 또한 msgget()에 대한 다른 매개 변수와 관련하여 주의해야 할 세 가지 사항이 있습니다: mq_open() 함수는 이름으로 참조되는 메시지 큐를 열고 나중에 큐를 참조할 수 있는 메시지 큐 설명기를 반환합니다. 이 플래그를 지정하면 mq_open() 세 번째 및 네 번째 매개변수가 검사됩니다(아래 모드 및 attr 참조).
記事を見てくれてありがとうございます!