SUSv3에 의하면 POSIX IPC 객체의 이름이 슬래시(/)로 시작("/example"
)하도록 하는 것이 이식성이 있다. 메시지 큐와 공유 메모리 이름의 길이는 최대 NAME_MAX
이고, 세마포어는 "/sem"
으로 시작하므로 이름의 최대 길이가 NAME_MAX-4
이다.
각 POSIX IPC 객체를 생성하는 mq_open()
, sem_open()
, shm_open()
함수는 open()
시스템 콜과 동일하게 사용된다. 이 함수들은 IPC 객체를 생성한 후 handle
을 리턴한다. 이 handle
은 메시지 큐에서는 mqd_t
, 세마포어에서는 sem_t
가 되고, 공유 메모리에서는 파일 디스크립터이다.
각 POSIX IPC마다 객체의 사용을 마침을 의미하는 close
호출이 존재하는데, 이는 객체와 관련된 자원을 할당 해제한다. POSIX 공유 메모리 객체의 경우 munmap()
의 호출로 종료된다. 또한 프로세스가 종료하거나 exec()
를 호출했을 경우 IPC 객체는 자동으로 종료된다.
IPC 객체의 권한은 실행 권한(x, 아무런 의미 없음)만 제외하면 파일과 동일한 의미를 갖는다. 커널 2.6.19 이후로 POSIX 공유 메모리와 named 세마포어에 한해 ACL
을 지원한다.
각 POSIX IPC 객체는 SYSV IPC와 달리 참조 카운트(reference count)
를 갖는다. POSIX IPC 객체를 삭제할 때 unlink
호출을 사용하는데, 이때 참조 카운트가 0이 될 때까지 기다리다가 해당 객체를 삭제한다. 참조 카운트가 0이 아니라는 것은 프로세스가 해당 객체를 open했다는 것이다. 0이 되기 위해서는 프로세스가 종료되거나, close
, munmap()
호출을 사용해야 한다.
SYSV IPC와 마찬가지로 POSIX IPC 객체는 unlink되거나 시스템이 종료될 때까지 계속 존재하는 커널 유지
기능을 갖는다.
POSIX IPC를 사용한 프로그램을 컴파일 할 때 -lrt
옵션을 추가하여 실시간 라이브러리인 librt
와 링크해야 한다.
ipcs
, ipcrm
과 달리 POSIX IPC 객체 정보를 출력하는 명령은 SUSv3에 명시되어 있지 않다.