3.4 메시지 큐
3.4.1 개요
프로세스 간 자료 교환하기
메시지 큐에 연결된 프로세스들은 메시지를 서로 보내고 받을 수 있다.
메시지 큐는 커널 영역에 존재.
프로세스는 유저 영역에 존재.
소량의 데이터를 간단히 보낼 때 메시지 큐를 사용하자!
메시지 큐는 동기화 문제가 없기 때문에 간단히 구현할 수 있다.
반대로 공유 메모리는 대량의 데이터를 주고받을 때 사용한다.
3.4.2 메시지 큐 함수
int msgget(key_t key, int msgflg);
기능: 메시지 큐 생성
리턴: 성공 시 메시지 큐 ID, 실패 시 errno 설정 후 -1 리턴
key: 메시지 큐 접근 키
msgflg: IPC_CREAT (메시지 큐가 없으면 새로 생성), IPC_CREAT | IPC_EXCL (메시지 큐가 있으면 에러)
int msgctl(int msqid, int cmd, struct msqid_ds* buf);
기능: 메시지 큐 제어
리턴: 성공 시 cmd 리턴값, 실패 시 errno 설정 후 -1 리턴
msqid: 메시지 큐 ID
cmd: IPC_STAT(메시지 큐 정보를 buf에 저장), IPC_RMID(메시지 큐 제거)
buf: msqid_ds
int msgsnd(int msqid, const void* msgp, size_t msgsz, int msgflg);
기능: 메시지 큐에 메시지 보내기
리턴: 성공 시 0, 실패 시 errno 설정 후 -1 리턴
msqid: 메시지 큐 ID
msgp: msg_buf 구조체를 가리킴, mtype 0 이상의 값은 필수
msgz: mtype (4B) 크기를 제외한 크기
msgflg: msgsnd()는 큐에 충분한 공간이 없다면 잠듦. IPC_NOWAIT인 경우 잠들지 않고 즉시 에러 리턴
int msgrcv(int msqid, void* msgp, size_t msgsz, long msgtyp, int msgflg);
기능: 메시지 큐에서 메시지 받기
리턴: 성공 시 받은 바이트 수, 실패 시 errno 설정 후 -1 리턴
msqid: 메시지 큐 ID
msgp: msg_buf 구조체를 가리킴
msgz: mtype (4B) 크기를 제외한 크기
msgtyp: 0인 경우 큐에 가장 먼저 들어온 메시지 읽기,
0 초과인 경우 mtype과 같은 메시지 중 가장 먼저 들어온 메시지 읽기,
0 미만인 경우 mtype이 msgtyp의 절대값보다 작거나 같은 메시지 중 가장 작은 mtype의 메시지 읽기
msgflg: msgrcv()는 큐에서 원하는 메시지가 없다면 생길 때까지 잠듦. IPC_NOWAIT인 경우 잠들지 않고 즉시 에러 리턴
'한국으로 > 임베디드 리눅스' 카테고리의 다른 글
5.2 시스템 콜 (0) | 2018.06.28 |
---|---|
5.1 프로세스 관리 (0) | 2018.06.28 |
4.2 스레드 동기화 (0) | 2018.06.28 |
4.1 스레드란? (0) | 2018.06.27 |
3.3 공유 메모리 (0) | 2018.06.27 |
3.2 세마포어 (0) | 2018.06.27 |
3.1 파이프 (0) | 2018.06.27 |
2.2 시그널 (0) | 2018.06.27 |