Provided by:
manpages-ko_20050219-2_all 
SYSTEM CALLS
fork() fork() 후에 자식 프로세스는 연결된 공유 메모리 세그먼트들을
상속한다.
exec() exec() 후에 모든 연결된 공유 메모리 세그먼트들은
분리된다.(파괴되는것이 아니다.)
exit() exit() 시 모든 연결된 공유 메모리 세그먼트는 분리된다.(파괴되는
것이 아니다.)
실패시 두 함수는 모두 에러를 가리키는 errno 와 -1 를 리턴하며 그렇지
않으면 shmat 는 연결된 공유 메모리 세그먼트의 주소를 리턴한다. 그리고
shmdt 는 0 를 리턴한다.
shmat 가 실패할때, 리턴되는 errno 는 다음값중 하나로 설정된다.
EACCES 호출 프로세스는 요구된 연결 타입에 대한 접근 허가권들이
없다.
EINVAL 유효하지 않은 shmid 값, 정렬되지 않은(즉, 페이지 정렬이
아니고 SHM_RND가 지정되지 않았다.) 또는 유효하지 않은
shmaddr 값, 또는 brk 에 연결 실패
ENOMEM 기술자나 페이지 테이블들을 위해 메모리를 할당할수 없다.
shmaddr 에 연결된 공유 메모리 세그먼트가 없다면 함수 shmdt 는 실패할수
있다. 이경우 리턴되는 errno 는 EINVAL 으로 설정될 것이다.
fork(2) 시스템 콜 실행시 자식 프로세스는 연결된 모든 공유 메모리
세그먼트둘을 상속한다.
execve(2) 로 실행되는 프로세스에 연결된 공유 메모리 세그먼트들은 결과
프로세스에 연결되지 않을 것이다.
다음은 shmat 시스템 콜에 영향을 미치는 시스템 인자이다:
SHMLBA Segment low boundary address multiple. 페이지들은
정렬되어야 한다. 현재 수행시 SHMBLA 값은 PAGE_SIZE 이다.
수행시 프로세스당 공유 메모리 세그먼트 최대수에 어떠한 내부 제한도
없다. (SHMSEG)
SVr4, SVID. SVr4는 EMFILE 에러 조건을 문셜했다. SVID-v4에shmaddr
인자는 char * 에const void * 로 바뀌었으며 shmat()의 리턴 타입은 char
* 에 void * 으로 바뀌었다. (Linux libc4 와 libc5는 char * 타입을
가지고 있다.; glibc2는 void * 을 가지고 있다.)
ipc(5), shmctl(2), shmget(2)
정걷<skyeyes@soback.kornet.net>, 2000년 5월 16일