Manpages

이 름

shmget − 공 유 메 모 리 세 그 먼 트 를 할 당 한 다 .

사 용 법

#include <sys/ipc.h>

#include <sys/shm.h>

int shmget(key_t key, int size, int shmflg);

설 명

shmget()key 인 자 값 과 관 련 된 공 유 메 모 리 세 그 먼 트 식 별 자 를 반 환 한 다 . 만 일 , keyIPC_PRIVATE 값 을 가 지 고 있 거 나 또 는 keyIPC_PRIVATE 가 아 니 고 , key 와 연 계 되 어 있 는 공 유 메 모 리 세 그 먼 트 가 없 다 면 PAGE_SIZE 의 배 수 만 큼 의 size 를 가 지 고 있 는 새 로 운 공 유 메 모 리 세 그 먼 트 가 만 들 어 진 다 . IPC_CREATshmflg 에 명 시 되 어 있 다 . (즉 , shmflg&IPC_CREAT 는 0이 아 니 다 .)

shmflg 의 구 성 은 다 음 과 같 다 :

IPC_CREAT

새 로 운 세 그 먼 트 를 만 든 다 . 만 일 이 플 래 그 가 사 용 되 지 않 는 다 면 , shmget()key와 관 련 된 세 그 먼 트 를 찾 을 것 이 며 , 사 용 자 가 그 세 그 먼 트 와 관 련 된 shmid 를 받 을 허 가 권 이 있 는 지 알 기 위 해 서 검 사 한 다 . 그 리 고 세 그 먼 트 가 파 괴 되 었 다 는 표 시 를 하 지 않 도 록 보 장 한 다 .

IPC_EXCL

세 그 먼 트 가 존 재 할 경 우 실 패 를 보 장 하 기 위 해 IPC_CREAT와 함 께 사 용 된 다 .

mode_flags (lowest 9 bits)

소 유 자 , 그 룹 , 그 외 들 을 보 장 하 기 위 해 허 가 권 을 지 정 한 다 . 현 재 , 실 행 허 가 권 은 시 스 템 에 의 해 사 용 되 지 않 는 다 .

새 로 운 세 그 먼 트 가 생 성 된 다 면 , shmflg 의 접 근 허 가 권 은 세 그 먼 트 에 정 의 되 어 있 는 shmid_dsshm_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.cuidshm_perm.uid 는 호 출 프 로 세 스 의 유 효 user−ID로 설 정 된 다 .

shm_perm.cgidshm_perm.gid 는 호 출 프 로 세 스 의 유 효 group−ID로 설 정 된 다 .

shm_perm.mode 의 하 위 9비 트 들 은 shmflg 의 하 위 9비 트 들 로 설 정 된 다 .

shm_segszsize 값 으 로 설 정 된 다 .

shm_lpid, shm_nattch, shm_atime 그 리 고 shm_dtime0 으 로 설 정 된 다 .

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_CREATIPC_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일