스트림 : 연속된 바이트들의 흐름(바이트 단위)
메세지 : 레코드 단위의 데이터 전송(format 존재)
시스템 V IPC
- 메세지 큐
- 세마포어(동기화)
- 공유메모리
인터페이스를 위한 별도의 함수 존재
동일한 namespace(input용)로 key를 이용, 식별자는 ID로 한다.
Key(키)
#include<sys/types.h>
#include<sys/ipc.h>
key_t ftok(char *pathname, char proj);
복잡한 키 값을 만들기 위해 경로명과 proj값을 이용.
메세지큐
입출력 데이터를 커널 내부에 메세지 (단일 링크드) 리스트 형태로 보관.
메세지 큐함수
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
int msgget(in:key_t key,in int msgflag);
메세지 채널을 (만들고) 연다.
ipc 채널 열기 = join
msgflag값 | key가 존재하지 않을 경우 | key가 존재하는 경우 |
없음 | errno = ENOENT | 기존 채널 ID 리턴 |
IPC_CREAT | 새 채널 ID 리턴 | 기존 채널 ID 리턴 |
IPC_CREAT|IPC_EXCL | 새 채널 ID 리턴 | errno = EEXIST |
int msgsnd(in:int msqid, in:const void *ptr, in:int length, in:int flag);
해당 ID의 채널에 메세지를 넣는다.
msqid : 메세지 채널 ID, ptr : 데이터 버퍼, length : 데이터 크기
flag
- IPC_NOWAIT : 메세지 큐가 다 찼으면 errno = EAGAIN
int msgrcv(in:int msqid, out:void *ptr, in:int length, in:long msgtype, in:int flag);
해당 ID의 채널에서 메세지를 하나 가져온다.
msqid : 메세지 채널 ID, ptr : 데이터 버퍼, length : 데이터 크기
msgtype
- ==0 : 첫번째 메세지를 리턴(큐처럼 동작)
- >0 : type이 같은 첫번째 메세지 리턴.
- <0 : msgtype의 절대값보다 작거나 같은 type의 첫번째 메세지 리턴.
int msgctl(in:int msqid, in:int cmd, inout:struct msqid_ds *buff);
해당 ID 채널을 제어한다. (주로 채널을 지우는 용도로 사용)
msqid : 메세지 채널 ID
cmd
IPC_STAT : IPC의 현재 정보를 얻음.(buff out)
IPC_SET : IPC의 현재 정보를 변경.(buff in)
IPC_RMID : 해당 ID 채널을 삭제.(buff NULL)
buff : 메세지 큐 정보에 관한 구조체
'컴퓨터 공부 > Advanced UNIX System Programming' 카테고리의 다른 글
[5월 12일 2교시] 시스템V IPC - 공유메모리, 쓰레드 (0) | 2009.05.12 |
---|---|
[5월 12일 1교시] 시스템V IPC - 세마포어 (0) | 2009.05.12 |
[5월 11일 1교시] FIFO (0) | 2009.05.11 |
[5월 8일 3교시] IPC (0) | 2009.05.08 |
[5월 8일 2교시] 입출력 (0) | 2009.05.08 |