다음 위로 이전 목차 리눅스 프로그래머를 위한 가이드

시스템 호출:shmctl() (SYSTEM CALL:shmctl())


  SYSTEM CALL: shmctl();
  PROTOTYPE: int shmctl ( int shmqid, int cmd, struct shmid_ds *buf );
    RETURNS: 0 on success
             -1 on error: errno = EACCES (No read permission and cmd is IPC_STAT)
                                  EFAULT (Address pointed to by buf is invalid with IPC_SET and
                                          IPC_STAT commands)
                                  EIDRM  (Segment was removed during retrieval)
                                  EINVAL (shmqid invalid)
                                  EPERM  (IPC_SET or IPC_RMID command was issued, but
                                          calling process does not have write (alter)
                                          access to the segment)
      NOTES:

이 특별한 호출은 메세지 큐의 msgctl 호출 이후 직접적으로 모델이 된다. 이러한 사실에 비추어, 너무 상세하게 언급하지는 않을 것이다. 유효한 명령어 값들은 다음과 같다.:

IPC_STAT

세그먼트의 shmid_ds 구조체를 조회하고 buf 아규먼트의 주소안에 그것을 저장한다.

IPC_SET

세그먼트의 shmid_ds 구조처의 ipc_perm 멤버의 값을 지정한다. buf 아규먼트로 부터 그 값을 가져온다.

IPC_RMID

제거하기 위해 세그먼트에 표시한다.

IPC_RMID 명령어는 실제로 커널로 부터 세그먼트를 제거하는 것은 아니다. 제거하기 위해 세그먼트에 표시를 해둔다. 실제적인 제거 자체는 현재 세그먼트에 붙어 있는(attached) 마지막 프로세스가 적절히 분리됐을(detached) 때 일어난다. 물론, 현재 세그먼트에 붙어있는 (attached) 프로세스가 없으면, 제거는 즉시 이루어 진다.

적절하게 공유 메모리 세그먼트에서 떨어지기(detach) 위해, 프로세스는 shmdt 시스템 호출을 호출한다.


이전:시스템 호출:shmat() 다음:시스템 호출:shmdt()

Copyright (c) 1996,1997 by Euibeom.Hwang & SangEun.Oh All Rights Reserved

Email To:Webmaster , Another address
LAST UPDATE Nov 28,1997
Created Nov 28,1997