semget 예제

이 예제는 sascc370 -Krent -o를 사용하여 컴파일됩니다. 이 프로그램은 UNIX 시스템 서비스 IPC 함수 semget() 및 semstat()의 사용을 보여 줍니다. 변수 sem_nsemsnsns의 값과 동일하게 설정되어야 합니다. 집합의 각 세마포와 관련된 데이터 구조를 초기화할 필요가 없습니다. SETVAL 또는 SETALL 명령이 있는 semctl() 함수는 각 세마포를 초기화하는 데 사용할 수 있습니다. . 키 인수는 원하는 세마포 세트 집합을 식별하는 정수 값입니다. IPC_PRIVATE의 키 값은 연결된 키 없이 새 세마포 세트를 요청하며 semget에서 반환하는 큐 ID로만 액세스할 수 있습니다. 새 세마포 세트를 만들 때 semget()은 관련 데이터 구조, semid_ds(semctl(2 참조)를 초기화합니다. EEXIST. (이것은 조합 O_CREAT의 효과와 유사합니다 | O_EXCL 열기(2).) IPC_PRIVATE은 플래그 필드가 아니라 key_t 유형입니다.

이 특수 값을 키에 사용하는 경우 시스템 호출은 semflg의 가장 중요한 9비트를 제외한 모든 것을 무시하고 새 세마포 세트(성공 시)를 만듭니다. 세마포 세트 리소스에 대한 다음 제한은 semget() 호출에 영향을 미칩니다. semctl의 SETALL 명령을 사용하여 세마포어의 초기 값을 지정해야 합니다. 새 세마포 세트를 만들거나 기존 집합에 액세스하려면 semget() 시스템 호출이 사용됩니다. IPC_CREAT를 단독으로 사용하는 경우 semget()은 새로 만든 집합에 대한 세마포 집합 식별자를 반환하거나 동일한 키 값으로 존재하는 집합에 대한 식별자를 반환합니다. IPC_EXCL이 IPC_CREAT와 함께 사용되는 경우 새 집합이 만들어지거나 집합이 있는 경우 -1로 호출이 실패합니다. IPC_EXCL은 그 자체로는 쓸모가 없지만 IPC_CREAT과 결합하면 액세스용기존 세마포 세트가 열리지 않는다는 것을 보장하는 시설로 사용할 수 있습니다. 새로 생성된 집합의 세마포의 값은 확정되지 않습니다. (POSIX.1-2001은 이 시점에서 명시적입니다.) Linux는 다른 많은 구현과 마찬가지로 세마포 값을 0으로 초기화하지만 이식 가능한 응용 프로그램은 이를 사용할 수 없습니다.