이 름
shmget − 공 유 메 모 리 세 그 먼 트 를 할 당 한 다 .
사 용 법
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, int size, int shmflg);
설 명
shmget() 는 key 인 자 값 과 관 련 된 공 유 메 모 리 세 그 먼 트 식 별 자 를 반 환 한 다 . 만 일 , key 가 IPC_PRIVATE 값 을 가 지 고 있 거 나 또 는 key 가 IPC_PRIVATE 가 아 니 고 , key 와 연 계 되 어 있 는 공 유 메 모 리 세 그 먼 트 가 없 다 면 PAGE_SIZE 의 배 수 만 큼 의 size 를 가 지 고 있 는 새 로 운 공 유 메 모 리 세 그 먼 트 가 만 들 어 진 다 . IPC_CREAT 는 shmflg 에 명 시 되 어 있 다 . (즉 , shmflg&IPC_CREAT 는 0이 아 니 다 .)
shmflg 의 구 성 은 다 음 과 같 다 :
IPC_CREAT |
새 로 운 세 그 먼 트 를 만 든 다 . 만 일 이 플 래 그 가 사 용 되 지 않 는 다 면 , shmget() 는 key와 관 련 된 세 그 먼 트 를 찾 을 것 이 며 , 사 용 자 가 그 세 그 먼 트 와 관 련 된 shmid 를 받 을 허 가 권 이 있 는 지 알 기 위 해 서 검 사 한 다 . 그 리 고 세 그 먼 트 가 파 괴 되 었 다 는 표 시 를 하 지 않 도 록 보 장 한 다 . | ||
IPC_EXCL |
세 그 먼 트 가 존 재 할 경 우 실 패 를 보 장 하 기 위 해 IPC_CREAT와 함 께 사 용 된 다 . |
mode_flags (lowest 9 bits)
소 유 자 , 그 룹 , 그 외 들 을 보 장 하 기 위 해 허 가 권 을 지 정 한 다 . 현 재 , 실 행 허 가 권 은 시 스 템 에 의 해 사 용 되 지 않 는 다 .
새 로 운 세 그 먼 트 가 생 성 된 다 면 , shmflg 의 접 근 허 가 권 은 세 그 먼 트 에 정 의 되 어 있 는 shmid_ds 의 shm_perm 멤 버 로 복 사 된 다 . shmid_ds 구 조 체 :
struct shmid_ds {
struct |
ipc_perm shm_perm; |
/* 퍼 미 션 */ | ||||||
int |
shm_segsz; |
/* 세 그 먼 트 의 크 기 (bytes) */ | ||||||
time_t |
shm_atime; |
|||||||
/* 마 지 막 접 근 시 간 */ | ||||||||
time_t |
shm_dtime; |
|||||||
/* 마 지 막 제 거 시 간 */ | ||||||||
time_t |
shm_ctime; |
|||||||
/* 마 지 막 변 경 시 간 */ | ||||||||
unsigned short |
shm_cpid; |
/* 생 성 자 의 pid */ | ||||||
unsigned short |
shm_lpid; |
/* 마 지 막 으 로 작 동 한 프 로 세 스 pid */ | ||||||
short |
shm_nattch; |
|||||||
/* 현 재 접 근 한 프 로 세 스 의 수 */ |
};
struct ipc_perm
{
key_t key;
ushort uid; /* 소 유 자 의 euid
와 egid */
ushort gid;
ushort cuid; /* 생 성 자 의 euid
와 egid */
ushort cgid;
ushort mode; /* shmflg의 하 위
9비 트 */
ushort seq; /* 연 속 수 (sequence number)
*/
};
게 다 가 , 생 성 되 는 동 안 시 스 템 콜 은 시 스 템 공 유 메 모 리 세 그 먼 트 데 이 터 구 조 shmid_ds 를 다 음 과 같 이 초 기 화 한 다 .
shm_perm.cuid 와 shm_perm.uid 는 호 출 프 로 세 스 의 유 효 user−ID로 설 정 된 다 .
shm_perm.cgid 와 shm_perm.gid 는 호 출 프 로 세 스 의 유 효 group−ID로 설 정 된 다 .
shm_perm.mode 의 하 위 9비 트 들 은 shmflg 의 하 위 9비 트 들 로 설 정 된 다 .
shm_segsz 는 size 값 으 로 설 정 된 다 .
shm_lpid, shm_nattch, shm_atime 그 리 고 shm_dtime 는 0 으 로 설 정 된 다 .
shm_ctime 는 현 재 시 간 으 로 설 정 된 다 .
만 일 공 유 메 모 리 세 그 먼 트 가 이 미 존 재 한 다 면 , 접 근 허 가 권 이 조 사 되 며 , 파 괴 도 도 록 표 시 되 어 있 는 지 알 아 보 기 위 해 검 사 한 다 .
SYSTEM CALLS
fork() |
fork() 후 에 자 식 프 로 세 스 는 연 결 된 공 유 메 모 리 세 그 먼 트 들 을 상 속 한 다 . | ||
exec() |
exec() 후 에 연 결 된 모 든 공 유 메 모 리 세 그 먼 트 는 분 리 된 다 .(파 괴 되 는 것 이 아 니 다 ) | ||
exit() |
exit() 시 연 결 된 모 든 공 유 메 모 리 세 그 먼 트 는 분 리 된 다 .(파 괴 되 는 것 이 아 니 다 ) |
반 환 값
성 공 시 유 효 한 세 그 먼 트 식 별 자 shmid 가 반 환 되 며 , 에 러 시 −1이 반 환 된 다 .
에 러
실 패 시 , errno 는 다 음 중 하 나 로 설 정 된 다 :
EINVAL |
만 일 SHMMIN > size, 또 는 size > SHMMAX, 또 는 size이 세 그 먼 트 의 크 기 보 다 크 다 면 이 에 러 가 반 환 된 다 . | ||
EEXIST |
IPC_CREAT | IPC_EXCL 이 지 정 되 어 있 고 , 세 그 먼 트 가 존 재 하 면 이 에 러 가 반 환 된 다 . | ||
EIDRM |
세 그 먼 트 가 파 괴 나 제 거 되 도 록 표 시 되 어 있 다 면 이 에 러 가 반 환 된 다 . | ||
ENOSPC |
가 능 한 모 든 공 유 메 모 리 id (SHMMNI) 를 가 졌 거 나 요 청 된 size 의 세 그 먼 트 할 당 이 시 스 템 전 체 공 유 메 모 리 제 한 값 (SHMALL) 을 초 과 할 경 우 반 환 된 다 . | ||
ENOENT |
주 어 진 key에 해 당 하 는 세 그 먼 트 가 존 재 하 지 않 고 , IPC_CREAT 가 지 정 되 지 않 았 다 면 반 환 된 다 . | ||
EACCES |
사 용 자 가 공 유 메 모 리 세 그 먼 트 에 대 한 접 근 허 가 권 이 없 을 때 반 환 된 다 . | ||
ENOMEM |
세 그 먼 트 를 위 해 할 당 할 메 모 리 가 없 을 때 반 환 된 다 . |
주 의
IPC_PRIVATE 는 플 레 그 필 드 가 아 니 라 key_t 타 입 이 다 . 이 특 별 한 값 이 key 에 사 용 된 다 면 , 시 스 템 콜 은 shmflg 의 하 위 9비 트 들 외 모 든 것 을 무 시 한 다 . 그 리 고 새 공 유 메 모 리 세 그 먼 트 를 생 성 (성 공 시 )한 다 .
다 음 은 shmget 시 스 템 콜 에 영 향 을 주 는 공 유 메 모 리 세 그 먼 트 자 원 들 의 제 한 값 들 이 다 :
SHMALL |
시 스 템 전 체 의 공 유 메 모 리 세 그 먼 트 최 대 값 : 정 책 의 존 적 이 다 . | ||
SHMMAX |
공 유 메 모 리 세 그 먼 트 의 최 대 크 기 (바 이 트 수 ): 수 행 의 존 적 이 다 .(현 재 4M) | ||
SHMMIN |
공 유 메 모 리 세 그 먼 트 의 최 소 크 기 (바 이 트 수 ): 수 행 의 존 적 이 다 .( PAGE_SIZE 가 유 효 한 최 소 크 기 이 지 만 , 현 재 는 1byte이 다 .) | ||
SHMMNI |
시 스 템 전 체 의 공 유 메 모 리 세 그 먼 트 최 대 수 : 수 행 의 존 적 이 다 (현 재 4096) |
수 행 시 프 로 세 스 당 공 유 메 모 리 세 그 먼 트 의 특 별 한 제 한 은 없 다 . (SHMSEG)
버 그
IPC_PRIVATE 를 사 용 하 면 할 당 된 공 유 메 모 리 세 그 먼 트 를 접 근 하 는 다 른 프 로 세 스 들 을 저 지 하 지 않 는 다 .
파 일 들 때 문 에 , 프 로 세 스 를 위 해 공 유 메 모 리 세 그 먼 트 에 대 한 배 타 적 접 근 을 보 장 하 기 위 한 방 법 이 현 재 는 없 다 . shmflg 비 트 에 IPC_CREAT 와 IPC_EXCL 의 지 정 만 이 새 공 유 메 모 리 세 그 먼 트 생 성 을 보 장 (성 공 시 )한 다 . 이 것 은 세 그 먼 트 에 대 한 배 타 적 접 근 을 나 타 내 는 것 은 아 니 다 .
호 환
SVr4, SVID. SVr4 문 서 는 EEXIST 에 러 조 건 을 추 가 적 으 로 기 술 했 다 . SVr4 와 SVID 문 서 들 은 EIDRM 조 건 을 기 술 하 지 않 았 다 .
관 련 항 목
ftok(3), ipc(5), shmctl(2), shmat(2), shmdt(2)
번 역
정
강 훈 <skyeyes [AT] soback.net>
2000년 5월 16일
한 글 Manpage 프 로 젝
트 (http://man.kldp.org) 2005년 2월
13일