shmget 서브루틴
용도
공유 메모리 세그먼트를 가져옵니다.
라이브러리
표준 C 라이브러리(libc.a)
Syntax
#include <sys/shm.h>
int shmget (Key, Size, SharedMemoryFlag)
key_t Key;
size_t Size
int SharedMemoryFlag;
int shmget (Key, Size, SharedMemoryFlag)
key_t Key;
size_t Size
int SharedMemoryFlag;
설명
shmget 서브루틴은 지정된 Key 매개변수와 연관된 공유 메모리 ID를 리턴합니다. 공유 메모리 한계에 대한 정보는 통신 한계 프로세스를 참조하십시오.
Parameters
항목 | 설명 |
---|---|
키 | 젖병 서브루틴 (또는 유사한 알고리즘) 으로 구성된 IPC키 또는 IPC_PRIVATE 값을 지정합니다. |
size | 필요한 공유 메모리의 바이트 수를 지정합니다. |
SharedMemory플래그 | 다음 값 중 하나 이상을 논리적으로 OR 처리하여 구성합니다.
S_I 접두부로 시작하는 값은 sys/mode.h 파일에 정의되며 파일에 적용되는 액세스 권한의 서브세트입니다. |
다음 중 하나가 참인 경우 공유 메모리 ID, 연관된 데이터 구조 및 공유 메모리 세그먼트가 Size 매개변수의 값과 동일한 바이트 수와 같은 경우 Key 매개변수에 대해 작성됩니다.
- 키 매개변수는 IPC_PRIVATE 값과 같습니다.
- Key 매개변수에는 공유 메모리 ID가 연관되어 있지 않으며 IPC_CREAT 플래그가 SharedMemory플래그 매개변수에 설정되어 있습니다.
생성 시, 새로운 공유 메모리 식별자와 연관된 데이터 구조는 다음과 같이 초기화된다:
- 의shm_perm.cuid및shm_perm.uid필드는 호출 프로세스의 유효 사용자 ID로 설정된다.
- 의shm_perm.cgid및shm_perm.gid필드는 호출 프로세스의 유효 그룹 ID로 설정된다.
- 다음의 하위 순서 9 비트shm_perm.mode필드는 SharedMemory플래그 매개변수의 하위 9비트로 설정됩니다.
- 의shm_segsz필드는 Size 매개변수 값으로 설정됩니다.
- 의 shm_lpid,shm_nattch,shm_atime및shm_dtime필드는 0으로 설정됩니다.
- 의shm_ctime필드가 현재 시간으로 설정됩니다.주: 일단 작성되면 시스템이 재부팅되거나 ipcrm 명령을 실행하거나 다음 shmctl 서브루틴을 사용하여 공유 메모리 세그먼트가 삭제됩니다.
if (shmctl (id, IPC_RMID, 0) == -1) perror ("error in closing segment"),exit (1);
리턴 값
성공적인 완료시, 공유 메모리 식별자가 리턴된다. 그렇지 않으면 shmget 서브루틴이 -1 값을 리턴하고 오류를 표시하도록 errno 전역 변수를 설정합니다.
오류 코드
다음 중 하나 이상이 참이면 shmget 서브루틴이 실패합니다.
항목 | 설명 |
---|---|
EACCES | 공유 메모리 ID가 Key 매개변수에 대해 존재하지만 SharedMemory플래그 매개변수의 하위 9비트에 지정된 조작 권한이 부여되지 않았습니다. |
EEXIST | 공유 메모리 ID가 Key 매개변수에 대해 존재하며 IPC_CREAT 및 IPC_EXCL 플래그 둘 다 SharedMemory플래그 매개변수에 설정됩니다. |
EINVAL | 공유 메모리 ID가 존재하지 않으며 Size 매개변수는 시스템이 부과한 최소값보다 작거나 시스템이 부과한 최대값보다 큽니다. |
EINVAL | 공유 메모리 ID가 Key 매개변수에 대해 존재하지만 연관된 세그먼트의 크기가 Size 매개변수보다 작고 Size 매개변수가 0과 같지 않습니다. |
ENOENT | 공유 메모리 ID가 Key 매개변수에 대해 존재하지 않으며 IPC_CREAT 플래그가 SharedMemoryFlag 매개변수에 설정되어 있지 않습니다. |
ENOMEM | 공유 메모리 식별자 및 연관된 공유 메모리 세그먼트가 작성되어야 하지만 사용 가능한 실제 메모리의 양이 요청을 충족시키기에 충분하지 않습니다. |
ENOSPC | 공유 메모리 식별자가 작성되지만, 허용되는 시스템에 부과된 최대 공유 메모리 식별자가 초과될 것입니다. |