next up previous contents
Next: WYWOŁANIE SYSTEMOWE: shmdt() Up: Pamięć dzielona Previous: WYWOŁANIE SYSTEMOWE: shmat()   Contents

WYWOŁANIE SYSTEMOWE: shmctl()


     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:

IPC_STAT

Pobiera strukturę shmid_ds i zachowuje ją pod adresem wskazywanym przez buf.

IPC_SET

Ustawia wartość elementu ipc_perm struktury shmid_ds. Pobiera wartość z argumentu buf.

IPC_RMID

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.




2000-03-01


Poltronic