WYWOŁANIE SYSTEMOWE: shmctl();
PROTOTYP: int shmctl ( int shmqid, int cmd, struct shmid_ds *buf );
ZWRACA: 0 - sukces
-1 - błąd: errno = EACCES ( odczyt zabroniony i cmd jest ustawiony na IPC_STAT )
EFAULT ( adres wskazywany przez buf jest nieprawidłowy dla
komend IPC_SET i IPC_STAT )
EIDRM ( segment został usunięty )
EINVAL ( nieprawidłowy shmqid )
EPERM ( podano komendy IPC_SET lub IPC_RMID, jednak
proces nie ma prawa zapisu, lub dostępu do segmentu )
UWAGI:
Wywołanie to jest utworzone na podobieństwo msgctl, więc nie będę się nad nim rozwodził. Prawidłowe komendy to:
Pobiera strukturę shmid_ds i zachowuje ją pod adresem wskazywanym przez buf.
Ustawia wartość elementu ipc_perm struktury shmid_ds. Pobiera wartość z argumentu buf.
Zaznacza segment do usunięcia.
Aktualnie komenda IPC_RMID nie usuwa segmentu. Zaznacza segment do usunięcia, które następuje po odłączeniu segmentu przez ostatni proces. Oczywiście, jeżeli żaden proces nie używa segmentu zostaje on natychmiast usunięty.
Aby odłączyć segment pamięci dzielonej proces wywołuje shmdt.