Provided by: manpages-pl-dev_20051117-1_all bug

NAZWA

       getitimer, setitimer - pobranie i ustawienie wartości czasomierza

SKŁADNIA

       #include <sys/time.h>

       int getitimer(int which, struct itimerval *value);
       int   setitimer(int   which,  const  struct  itimerval  *value,  struct
              itimerval *ovalue);

OPIS

       System zaopatruje każdy proces w  trzy  czasomierze,  z  których  każdy
       odlicza  czas  się  w innej domenie czasowej. Gdy upłynie czas ważności
       ustawiony dla któregoś z czasomierzy, do procesu wysyłany jest  sygnał,
       a czasomierz jest (potencjalnie) restartowany.

       ITIMER_REAL
              odlicza  czas  rzeczywisty  i dostarcza SIGALRM po upływie czasu
              ważności.

       ITIMER_VIRTUAL
              odlicza czas wykonywania się procesu i  dostarcza  SIGVTALRM  po
              upływie czasu ważności.

       ITIMER_PROF
              odlicza  zarówno  czas  wykonywania  się  procesu,  jak  i  czas
              wykonywania  przez  system  zlecenie  procesu.  W  powiązaniu  z
              ITIMER_VIRTUAL,   ten   czasomierz   zwykle   jest   używany  do
              parametryzowania  czasu  używanego  przez  aplikację  zarówno  w
              przestrzeni użytkownika, jak i jądra.  Po upływie czasu ważności
              dostarczany jest SIGPROF.

       Wartości czasomierza są zdefiniowane za pomocą następujych struktur:
            struct itimerval {
                struct timeval it_interval; /* następna wartość */
                struct timeval it_value;    /* obecna wartość */
            };
            struct timeval {
                long tv_sec;                /* sekundy */
                long tv_usec;               /* mikrosekundy */
            };

       Funkcja  getitimer(2)  wypełnia  strukturę   wskazywaną   przez   value
       aktualnym  ustawieniem  czasomierza  wskazywanego  przez which (jeden z
       ITIMER_REAL, ITIMER_VIRTUAL lub ITIMER_PROF).  Do  pola  it_value  jest
       wpisywana  ilość  czasu,  który  pozostał czasomierzowi lub zero, jeśli
       czasomierz jest wyłączony.  Podobnie,  do  it_interval  jest  wpisywana
       wartość  inicjalizacyjna.   Funkcja setitimer(2) ustawia dla wskazanego
       czasomierza wartości zawarte w value.  Jeśli ovalue jest niezerowe,  to
       jest tam zapisywana stara wartość czasomierza.

       Czasomierz  odlicza od it_value do zera, generuje sygnał i inicjalizuje
       się na  it_interval.   Czasomierz  ustawiony  na  zero  (it_value  jest
       zerowe,  lub  upłynął  czasu  ważności  czasomierza, a it_interval jest
       zerowe) zatrzymuje się.

       Przy określaniu czasu działania czasomierza istotne są  zarówno  tv_sec
       jak i tv_usec.

       Ważność  czasomierzy  nigdy  nie upływa przed zadanym czasem, natomiast
       dzieje się to o krótki, stały czas, zależny  od  rozdzielczości  zegara
       systemowego  (obecnie  10ms),  później.  W chwili upływu czasu ważności
       generowany jest  sygnał,  a  czasomierz  jest  resetowany.  Jeśli  czas
       ważności  upływa,  gdy  proces  jest aktywny (jest to zawsze prawda dla
       ITIMER_VIRT),   to   sygnał   zostanie   dostarczony   natychmiast   po
       wygenerowaniu.  W  przeciwnym  wypadku  dostarczenie będzie opóźnione o
       krótki okres czasu, zależny od obciążenia systemu.

WARTOŚĆ ZWRACANA

       Po pomyślnym zakończeniu zwracane jest zero. Po błędzie  zwracane  jest
       -1 i odpowiednio ustawiane errno.

BŁĘDY

       EFAULT value lub ovalue nie jest prawidłowym wskaźnikiem.

       EINVAL which   nie   jest   jednym   z   ITIMER_REAL,  ITIMER_VIRT  lub
              ITIMER_PROF.

ZGODNE Z

       SVr4, 4.4BSD (Ta funkcja pierwotnie pojawiła się w 4.2BSD).

ZOBACZ TAKŻE

       gettimeofday(2), sigaction(2), signal(2)

USTERKI

       Pod  Linuksem,  generowanie  i  dostarczanie  sygnału  są   oddzielnymi
       zdarzeniami  i  dla  każdego  sygnału  może  być  tylko  jedno  zaległe
       zdarzenie.  Zatem  możliwe  jest,  że  podczas   patologicznie   dużego
       obciążenia czas ważności ITIMER_REAL może upłynąć wcześniej, niż sygnał
       poprzedniego przeterminowania  zostanie  dostarczony.  Drugi  sygnał  w
       takiej sytuacji zostanie utracony.