이 름
shmctl − 공 유 메 모 리 를 제 어 한 다 .
사 용 법
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
설 명
shmctl() 는 사 용 자 가 공 유 메 모 리 세 그 먼 트 에 관 한 정 보 를 얻 거 나 공 유 메 모 리 세 그 먼 트 의 소 유 자 , 그 룹 , 허 가 권 들 을 설 정 하 거 나 세 그 먼 트 를 파 괴 하 는 걸 허 용 한 다 . shmid로 식 별 되 는 세 그 먼 트 에 관 한 정 보 는 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; |
|||||||
/* 현 재 접 근 한 프 로 세 스 의 수 */ | ||||||||
/* 다 음 은 개 별 적 이 다 */ |
||||||||
unsigned short shm_npages; /* 세 그 먼 트 의 크 기 (pages) */ |
||||||||
unsigned long *shm_pages; |
||||||||
struct shm_desc *attaches; /* 접 근 을 위 한 기 술 자 들 */ |
};
shm_perm 멤 버 의 필 드 들 은 설 정 될 수 있 다 :
struct ipc_perm
{
key_t key;
ushort uid; /* owner의 euid 와 egid
*/
ushort gid;
ushort cuid; /* 생 성 자 의 euid
와 egid */
ushort cgid;
ushort mode; /* 접 근 모 드
의 하 위 9 bits */
ushort seq; /* 연 속 수 (sequence number)
*/
};
다 음 cmds가 이 용 될 수 있 다 :
IPC_STAT |
공 유 메 모 리 세 그 먼 트 에 관 한 정 보 를 버 퍼 buf에 복 사 하 기 위 해 사 용 된 다 . 사 용 자 는 공 유 메 모 리 세 그 먼 트 에 read접 근 을 해 야 한 다 . | ||
IPC_SET |
shm_perms필 드 의 uid, gid, or mode 멤 버 들 에 대 한 사 용 자 변 경 을 적 용 하 기 위 해 사 용 된 다 . mode의 하 위 9비 트 들 만 이 사 용 된 다 . shm_ctime 멤 버 또 한 갱 신 된 다 . 사 용 자 는 소 유 자 , 생 성 자 , 또 는 슈 퍼 유 저 이 어 야 한 다 . | ||
IPC_RMID |
파 괴 될 세 그 먼 트 를 표 시 하 기 위 해 사 용 된 다 . 실 제 로 는 마 지 막 분 리 후 에 파 괴 된 다 . (즉 , 관 련 된 shmid_ds 구 조 체 의 shm_nattch 멤 버 가 0일 때 ) 사 용 자 는 소 유 자 , 생 성 자 또 는 슈 퍼 유 저 이 어 야 한 다 . |
사 용 자 는 세 그 먼 트 가 결 국 파 괴 되 었 다 는 것 을 보 장 해 야 한 다 : 그 렇 지 않 으 면 폴 트 가 난 페 이 지 들 은 메 모 리 나 스 왑 에 남 아 있 을 것 이 다 .
게 다 가 , super-user는 다 음 cmds와 관 련 된 공 유 메 모 리 세 그 먼 트 의 스 왑 핑 을 금 지 하 거 나 허 용 할 수 있 다 : (Linux only)
SHM_LOCK |
공 유 메 모 리 세 그 먼 트 의 스 와 핑 을 막 는 다 . 사 용 자 가 있 어 야 하 는 페 이 지 들 을 잠 금 후 에 요 구 한 다 면 위 반 이 다 . | ||
SHM_UNLOCK |
공 유 메 모 리 세 그 먼 트 에 대 한 스 와 핑 을 허 용 한 다 . |
IPC_INFO, SHM_STAT 그 리 고 SHM_INFO 는 할 당 된 자 원 들 에 관 한 정 보 를 제 공 하 는 ipcs(8) 의 의 해 사 용 된 다 . 미 래 에 , 이 것 들 은 proc 파 일 시 스 템 인 터 페 이 스 를 위 해 서 필 요 할 때 수 정 되 거 나 이 동 될 수 있 다 .
SYSTEM CALLS
fork() |
fork() 후 에 자 식 프 로 세 스 는 연 결 된 공 유 메 모 리 세 그 먼 트 들 을 상 속 한 다 . | ||
exec() |
exec() 후 에 연 결 된 모 든 공 유 메 모 리 세 그 먼 트 들 은 분 리 된 다 .(파 괴 되 는 것 이 아 니 다 .) | ||
exit() |
exit() 시 에 연 결 된 모 든 공 유 메 모 리 세 그 먼 트 들 은 분 리 된 다 .(파 괴 되 는 것 이 아 니 다 .) |
반 환 값
성 공 시 0이 리 턴 되 며 , 에 러 시 −1이 리 턴 된 다 .
에 러
에 러 시 , errno 는 다 음 중 하 나 로 설 정 된 다 .
EACCES |
IPC_STAT가 요 청 되 고 shm_perm.modes가 msqid 에 대 한 읽 기 접 근 이 허 용 되 지 않 을 경 우 리 턴 된 다 . | ||
EFAULT |
cmd 인 자 가 IPC_SET 나 IPC_STAT 값 을 가 지 고 있 지 만 buf 에 지 정 된 주 소 는 접 근 할 수 없 다 . | ||
EINVAL |
shmid가 유 효 식 별 자 가 아 니 거 나 cmd가 유 효 한 명 령 어 가 아 니 라 면 리 턴 된 다 . | ||
EIDRM |
shmid가 제 거 된 식 별 자 를 가 리 키 고 있 다 면 리 턴 된 다 . | ||
EPERM |
IPC_SET나 IPC_RMID가 시 도 됐 고 사 용 자 가 생 성 자 나 소 유 자 또 는 슈 퍼 유 저 가 아 니 고 , 사 용 자 가 그 룹 이 나 그 외 에 대 한 허 가 권 을 가 지 고 있 지 않 다 면 리 턴 된 다 . |
호 환
SVr4, SVID. SVr4는 추 가 적 으 로 EINVAL, ENOENT, ENOSPC, ENOMEM, EEXIST 에 러 조 건 들 을 문 서 화 했 다 . SVr4나 SVID 모 두 EIDRM 에 러 조 건 은 문 서 화 하 지 않 았 다 .
관 련 항 목
역 자
정 강 훈 <skyeyes [AT] soback.net>, 2000년 5월 18일