K 개발자
메시지 큐 본문
메시지 큐 관련 함수
메시지 큐message queue는 파이프pipe와 유사하다.
단, 파이프는 스트림 기반으로 동작하고, 메시지 큐는 메시지(또는 패킷) 단위로 동작한다.
각 메시지의 최대 크기는 제한되어 있다.
각 메시지에는 메시지 유형message type이 있으므로, 수신 프로세스는 어떤 유형의 메시지를 받을 것인지 선택할 수 있다.
메시지 큐 생성 : msgget(2)
#include <sys/msg.h>
int msgget(key_t key, int msgflg);
// key : 메시지 큐를 구별하는 키, msgflg : 메시지 큐의 속성을 설정하는 플래그
메시지 전송 : msgsnd(2)
#include <sys/msg.h>
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
// msqid : msgget 함수로 생성한 메시지 큐 식별자, msgp : 메시지를 담고 있는 메시지 버퍼의 주소
// msgsz : 메시지의 크기(0~시스템이 정한 최댓값), msgflg : 블록 모드(0)/비블록 모드(IPC_NOWAIT)
메시지 수신 : msgrcv(2)
#include <sys/msg.h>
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg);
// msqid : msgget 함수로 생성한 메시지 큐 식별자, msgp : 메시지를 담고 있는 메시지 버퍼의 주소
// msgsz : 메시지 버퍼의 크기, msgtyp : 읽어올 메시지의 유형, msgflg : 블록 모드(0)/비블록 모드(IPC_NOWAIT)
메시지 제어 : msgctl(2)
#include <sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
// msqid : msgget 함수로 생성한 메시지 큐 식별자, cmd : 수행할 제어 기능, buf : 제어 기능에 사용되는 메시지 큐 구조체의 주소
Comments