Manpages

이 름

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.modesmsqid 에 대 한 읽 기 접 근 이 허 용 되 지 않 을 경 우 리 턴 된 다 .

EFAULT

cmd 인 자 가 IPC_SETIPC_STAT 값 을 가 지 고 있 지 만 buf 에 지 정 된 주 소 는 접 근 할 수 없 다 .

EINVAL

shmid가 유 효 식 별 자 가 아 니 거 나 cmd가 유 효 한 명 령 어 가 아 니 라 면 리 턴 된 다 .

EIDRM

shmid가 제 거 된 식 별 자 를 가 리 키 고 있 다 면 리 턴 된 다 .

EPERM

IPC_SETIPC_RMID가 시 도 됐 고 사 용 자 가 생 성 자 나 소 유 자 또 는 슈 퍼 유 저 가 아 니 고 , 사 용 자 가 그 룹 이 나 그 외 에 대 한 허 가 권 을 가 지 고 있 지 않 다 면 리 턴 된 다 .

호 환

SVr4, SVID. SVr4는 추 가 적 으 로 EINVAL, ENOENT, ENOSPC, ENOMEM, EEXIST 에 러 조 건 들 을 문 서 화 했 다 . SVr4나 SVID 모 두 EIDRM 에 러 조 건 은 문 서 화 하 지 않 았 다 .

관 련 항 목

shmget(2), shmop(2)

역 자

정 강 훈 <skyeyes [AT] soback.net>, 2000년 5월 18일