shmget 서브루틴
용도
공유 메모리 세그먼트를 가져옵니다.
라이브러리
표준 C 라이브러리(libc.a)
구문
#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 매개변수와 연결된 공유 메모리 식별자를 반환합니다. 공유 메모리 제한에 대한 자세한 내용은 다음을 참조하세요: 프로세스 간 통신 제한을 참조하세요.
매개변수
| 항목 | 설명 |
|---|---|
| 키 | Ftok 서브루틴(또는 유사한 알고리즘)에 의해 생성된 IPC_PRIVATE 값 또는 IPC 키를 지정합니다. |
| size | 필요한 공유 메모리 바이트 수를 지정합니다. |
| SharedMemoryFlag | 다음 값 중 하나 이상을 논리적으로 OR하여 구성합니다:
S_I 접두사로 시작하는 값은 sys/mode.h 파일에 정의되어 있으며 파일에 적용되는 액세스 권한의 하위 집합입니다. |
다음 중 하나에 해당하는 경우 Key 매개변수에 대해 공유 메모리 식별자, 관련 데이터 구조 및 Size 매개변수 값과 동일한 바이트 수의 공유 메모리 세그먼트가 생성됩니다:
- Key 매개변수는 IPC_PRIVATE 값과 동일합니다.
- Key 매개변수에 공유 메모리 식별자가 이미 연결되어 있지 않으며, IPC_CREAT 플래그가 SharedMemoryFlag 매개변수에 설정되어 있습니다.
생성 시 새 공유 메모리 식별자와 관련된 데이터 구조는 다음과 같이 초기화됩니다:
- 다음shm_perm.cuid및shm_perm.uid필드는 호출 프로세스의 유효 사용자 ID로 설정됩니다.
- 다음shm_perm.cgid및shm_perm.gid필드는 호출 프로세스의 유효 그룹 ID로 설정됩니다.
- 저차 9비트의shm_perm.mode필드의 하위 9번째 비트는 SharedMemoryFlag 매개변수의 하위 9번째 비트로 설정됩니다.
- 다음shm_segsz필드는 크기 매개변수의 값으로 설정됩니다.
- 다음 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 | Key 매개변수에 대한 공유 메모리 식별자가 존재하지만 SharedMemoryFlag 매개변수의 하위 9비트에 지정된 작업 권한은 부여되지 않습니다. |
| EEXIST | ' 키 매개변수에 대한 공유 메모리 식별자가 존재하며 ' IPC_CREAT ' 및 IPC_EXCL ' 플래그는 모두 ' SharedMemoryFlag ' 매개변수에 설정되어 있습니다. |
| EINVAL | 공유 메모리 식별자가 존재하지 않고 Size 매개변수가 시스템에서 부과한 최소값보다 작거나 시스템에서 부과한 최대값보다 큽니다. |
| EINVAL | Key 매개변수에 대한 공유 메모리 식별자가 존재하지만 이와 연결된 세그먼트의 크기가 Size 매개변수보다 작고 Size 매개변수가 0이 아닌 경우입니다. |
| ENOENT | Key 매개변수에 대한 공유 메모리 식별자가 존재하지 않으며, SharedMemoryFlag 매개변수에 IPC_CREAT 플래그가 설정되어 있지 않습니다. |
| ENOMEM | 공유 메모리 식별자 및 관련 공유 메모리 세그먼트가 생성되어야 하지만 사용 가능한 물리적 메모리의 양이 요청을 충족하기에 충분하지 않습니다. |
| ENOSPC | 공유 메모리 식별자가 생성되지만 시스템에서 허용하는 최대 공유 메모리 식별자 수를 초과하게 됩니다. |