Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       semctl - sterowanie semaforami

SK/LADNIA

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/sem.h>

       int semctl(int semid, int semnum, int cmd, ...);

OPIS

       Funkcja  semctl  wykonuje operacj sterujc okrelon przez cmd na zestawie
       semaforow okrelonym  przez  semid  lub  na  semnum-tym  semaforze  tego
       zestawu. (Numeracja semaforow zaczyna si od 0.)

       Funkcja  ta  posiada  trzy  lub  cztery argumenty. Gdy jest ich cztery,
       wywolanie ma posta semctl(semid,semnum,cmd,arg), gdzie czwarty argument
       arg jest typu union semun zdefiniowanego nastpujco:

       #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
       /* union semun jest zdefiniowana w <sys/sem.h> */
       #else
       /* dla zgodnoci z X/OPEN musimy sami sobie zdefiniowa */
       union semun {
             int val;                  /* warto dla SETVAL */
             struct semid_ds *buf;     /* bufor dla IPC_STAT i IPC_SET */
             unsigned short *array;    /* tablica dla GETALL i SETALL */
                                       /* Cz specyficzna dla Linuksa: */
             struct seminfo *__buf;    /* bufor dla IPC_INFO */
       };
       #endif

       Dozwolone wartoci parametru cmd to:

       IPC_STAT    Kopiowanie   informacji  ze  struktury  kontrolnej  zestawu
                   semaforow do struktury wskazywanej przez arg.buf.  Argument
                   semnum  jest  pomijany.   Proces  wywolujcy funkcj musi mie
                   prawa do odczytu zestawu semaforow.

       IPC_SET     Zapis wartoci niektorych pol struktury semid_ds wskazywanej
                   przez  arg.buf  do struktury kontrolnej zestawu semaforow z
                   jednoczesnym    uaktualnieniem    pola    sem_ctime    (tj.
                   przypisaniem  mu aktualnego wskazania czasu).  Pola zadanej
                   struktury  struct  semid_ds  wskazywanej   przez   arg.buf,
                   ktorych wartoci s kopiowane to:

                        sem_perm.uid
                        sem_perm.gid
                        sem_perm.mode  /* tylko 9 najmniej znaczcych bitow */

                   Efektywny identyfikator uytkownika procesu wywolujcego musi
                   wskazywa na administratora systemu, tworc zestawu semaforow
                   lub jego wlaciciela.  Argument semnum jest pomijany.

       IPC_RMID    Natychmiastowe usunicie zestawu semaforow i zwizanych z nim
                   struktur  danych.   Wszystkie  procesy   oczekujce   zostan
                   wznowione  i  wywolania,  ktore wykonywaly zasygnalizuj bld
                   (przypisujc  zmiennej  errno   warto   EIDRM).    Efektywny
                   identyfikator  uytkownika  procesu  wywolajcego funkcj musi
                   wskazywa  na   administratora   systemu,   tworce   zestawu
                   semaforow   lub   jego  wlaciciela.  Argument  semnum  jest
                   pomijany.

       GETALL      Zwraca  wartoci  semval  wszystkich  semaforow  z   zestawu
                   umieszczajc  je  w tablicy arg.array.  Argument semnum jest
                   pomijany.   Proces  wywolujcy  funkcj  musi  mie  prawa  do
                   odczytu zestawu semaforow.

       GETNCNT     Zwraca  warto  semncnt  skojarzon  z semaforem numer semnum
                   semaforem (tzn. liczb procesow oczekujcych na zwikszenie si
                   wartoci  semval  skojarzonej  z  semaforem  numer  semnum).
                   Proces wywolujcy funkcj musi mie prawa do  odczytu  zestawu
                   semaforow.

       GETPID      Zwraca  warto sempid skojarzon z semaforem o numerze semnum
                   w zestawie.  (jest to identyfikator procesu, ktory ostatnio
                   wykonal  semop na semaforze).  Proces wywolujcy funkcj musi
                   mie prawa do odczytu zestawu semaforow.

       GETVAL      Zwraca warto semval semafora o numerze semnum  w  zestawie.
                   Proces  wywolujcy  funkcj musi mie prawa do odczytu zestawu
                   semaforow.

       GETZCNT     Zwraca warto semzcnt skojarzon z semaforem o numerze semnum
                   w  zestawie.  (tzn. liczb procesow oczekujcych na osignicie
                   przez  semafor  o  numerze  semnum  wartoci   0).    Proces
                   wywolujcy   funkcj   musi  mie  prawa  do  odczytu  zestawu
                   semaforow.

       SETALL      Przypisuje  wartoci  semval  wszystkim  semaforom  zestawu,
                   korzystajc z tablicy arg.array, jednoczenie uaktualnia pole
                   sem_ctime  struktury  semid_ds  skojarzonej   z   zestawem.
                   Wszystkie  struktury  sem_undo  skojarzone  z zestawem s we
                   wszystkich  procesach  zwalniane.   Procesy  oczekujce   na
                   osignicie  przez poszczegolne semafory okrelonych wartoci s
                   wznawiane, jeli ktora z wartoci semval stanie si zerowa lub
                   wzronie.   Argument semnum jest pomijany.  Proces wywolujcy
                   funkcj musi mie prawa do modyfikacji zestawu semaforow.

       SETVAL      Przypisuje warto arg.val polu  semval  semafora  o  numerze
                   semnum   w  zestawie.  Pole  sem_ctime  struktury  semid_ds
                   skojarzonej  z  semaforem  jest  uaktualniane.    Wszystkie
                   struktury  sem_undo  skojarzone  z  semaforem  s zwalniane.
                   Procesy oczekujce na  osignicie  przez  semafor  okrelonych
                   wartoci  zostan wznowione, jeli semval stanie si rowne zeru
                   lub wzronie.  Proces wywolujcy funkcj  musi  mie  prawa  do
                   odczytu zestawu semaforow.

WARTO ZWRACANA

       W  przypadku  wystpienia  bldu,  semctl  zwroci -1, przypisujc zmiennej
       errno warto okrelajc rodzaj  bldu.   W  przeciwnym  przypadku  zwrocona
       zostanie  nieujemna  warto  zalena  od  okrelonej przez cmd wykonywanej
       operacji w nastpujcy sposob:

       GETNCNT    warto semncnt.

       GETPID     warto sempid.

       GETVAL     warto semval.

       GETZCNT    warto semzcnt.

       Dla wszystkich pozostalych wartoci cmd  w  razie  pomylnego  zakoczenia
       zwracane jest 0.

B/LDY

       W  przypadku wystpienia bldu, zmienna errno przyjmie jedn z nastpujcych
       wartoi:

       EACCES     Proces wywolujcy funkcj nie ma odpowiednich praw  wymaganych
                  do wykonania operacji cmd.

       EFAULT     Adres   wskazywany   przez   arg.buf   lub   arg.array  jest
                  niedostpny.

       EIDRM      Zestaw semaforow zostal usunity.

       EINVAL     Niewlaciwa warto parametru cmd lub semid.

       EPERM      Argument cmd ma  warto  IPC_SET  lub  IPC_RMID,  ale  proces
                  wywolujcy  funkcj nie ma uprawnie upowaniajcych do wykonania
                  tego polecenia.

       ERANGE     Argument cmd ma warto SETALL  lub  SETVAL  ale  przekazywana
                  warto semafora semval (dla ktorego z semaforow zestawu) jest
                  mniejsza od 0 lub wiksza od wartoci ograniczenia systemowego
                  SEMVMX.

UWAGI

       Polecenia sterujce IPC_INFO, SEM_STAT i SEM_INFO s uywane przez program
       ipcs(8) do pobierania informacji o uywanych zasobach w systemie.   Jeli
       zajdzie  potrzeba,  polecenia  te mog w przyszloci ulec zmianie lub ich
       obsluga moe zosta zawarta w systemie plikow /proc.

       Niektore pola struktury struct semid_ds byly w Linuksie 2.2 typu  short
       a  staly  si  typu  long  w  Linuksie  2.4.  Aby to wykorzysta, powinna
       wystarczy rekompilacja pod  glibc-2.1.91  lub  nowsz.   (Jdro  rozronia
       stare i nowe wywolania za pomoc znacznika IPC_64 w cmd.)

       Dla wywolania semctl obowizuj nastpujce ograniczenia systemowe:

       SEMVMX     Maksymalna warto semval: zalena od implementacji (32767).

       W celu uzyskania lepszej przenonoci, najlepiet zawsze wywolywa semctl z
       czterema argumentami.

       Pod  Linuksem  funkcja  semctl  nie  jest  funkcj  systemow,  ale  jest
       zaimplementowana poprzez funkcj systemow ipc(2).

ZGODNE Z

       SVr4, SVID. W SVr4 udokumntowano jeszcze EINVAL i EOVERFLOW.

ZOBACZ TAKE

       ipc(2), shmget(2), shmat(2), shmdt(2), ipc(5)

INFORMACJE O T/LUMACZENIU

       Powysze  tlumaczenie  pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic  midzy  powyszym
       opisem  a  rzeczywistym  zachowaniem  opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.