SHMAT(2)

명칭
shmat, shmdt - 공유 메모리를 아탓치 또는 데탓치 한다

프로그램 라이브러리
libc

서식
<machine/param.h> <sys/types.h> <sys/ipc.h> <sys/shm.h> void * shmat(int shmid, void *addr, int flag) int shmdt(void *addr)

해설
shmat() (은)는, shmid 에 의해 식별된 공유 메모리세그먼트를 호출해 프로세스의 address 공간에 아탓치 합니다. 세그먼트(segment)가 아탓치 된다 주소는 다음과 같이 결정됩니다.

•   addr 하지만 0 의 경우, 세그먼트(segment)는, 커널이 선택한 주소에 아탓치 됩니다.

•   addr 하지만 0 이 아니고, 게다가 SHM_RND 가 flag 그리고 지정되지 않는 경우, 세그먼트(segment)는 지정의 주소에 아탓치 됩니다.

•   addr 하지만 지정되어 있어 게다가 SHM_RND 가 지정되어 있는 경우, addr (은)는 가장 가까운 SHMLBA 의 배수에 잘라서 버리고 됩니다.

shmdt() (은)는, addr 그리고 지정되는 주소에 있는 공유 메모리세그먼트를, 호출 프로세스의 address 공간으로부터 데탓치 합니다.

반환값
정상적으로 완료하면(자), shmat() (은)는 세그먼트(segment)가 아탓치 되고 있는 주소를 돌려줍니다. 그렇지 않은 경우는 -1 하지만 돌려주어져 에러를 나타내기 위해서(때문에) errno 하지만 설정됩니다.

에러
shmat() (은)는 다음의 경우에 처리를 실패합니다.

[EINVAL]
    shmid 에 대응하는 공유 메모리세그먼트가 발견되지 않았습니다.

[EINVAL]
    addr 하지만 유효한 주소가 아니었습니다.

shmdt() (은)는 다음의 경우에 처리에 실패합니다.

[EINVAL]
    addr (은)는 공유 메모리세그먼트를 가리키고 있지 않습니다.

관련 항목
shmctl(2), shmget(2)