.\" -*- coding: UTF-8 -*-
.\" Copyright 7/93 by Darren Senn <sinster@scintilla.santa-clara.ca.us>
.\" and Copyright (C) 2016, Michael Kerrisk <mtk.manpages@gmail.com>
.\" Based on a similar page Copyright 1992 by Rick Faith
.\"
.\" %%%LICENSE_START(FREELY_REDISTRIBUTABLE)
.\" May be freely distributed and modified
.\" %%%LICENSE_END
.\"
.\" Modified Tue Oct 22 00:22:35 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
.\" 2005-04-06 mtk, Matthias Lang <matthias@corelatus.se>
.\" 	Noted MAX_SEC_IN_JIFFIES ceiling
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH getitimer 2 "3 maja 2023 r." "Linux man\-pages 6.05.01" 
.SH NAZWA
getitimer, setitimer \- pobiera i ustawia wartości czasomierza
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <sys/time.h>\fP
.PP
\fBint getitimer(int \fP\fIwhich\fP\fB, struct itimerval *\fP\fIcurr_value\fP\fB);\fP
\fBint setitimer(int \fP\fIwhich\fP\fB, const struct itimerval *restrict \fP\fInew_value\fP\fB,\fP
\fB              struct itimerval *_Nullable restrict \fP\fIold_value\fP\fB);\fP
.fi
.SH OPIS
Te wywołania systemowe umożliwiają dostęp do czasomierzy (timerów)
interwałowych, to jest czasomierzy, które najpierw wygasają w pewnym punkcie
w przyszłości, a potem (opcjonalnie) w regularnych odstępach czasu. Po
wygaśnięciu czasomierza wysyłany jest sygnał do procesu wywołującego, a
następnie czasomierz jest ponownie inicjowany podaną wartością interwału
(jeśli jest niezerowa).
.PP
Dostępne są trzy typy czasomierzy, podawane w argumencie \fIwhich\fP; każdy z
nich mierzy czas według innego zegara i generuje inny sygnał, gdy upłynie
czas ważności:
.TP 
\fBITIMER_REAL\fP
Odlicza czas rzeczywisty. Po wygaśnięciu generuje sygnał \fBSIGALRM\fP.
.TP 
\fBITIMER_VIRTUAL\fP
Odlicza czas CPU wykonywania się procesu w przestrzeni
użytkownika. (Obliczenia obejmują czas CPU zużyty przez wszystkie wątki
procesu). Po każdorazowym wygaśnięciu generowany jest sygnał \fBSIGVTALRM\fP.
.TP 
\fBITIMER_PROF\fP
Odlicza całkowity (tj. zarówno w przestrzeni użytkownika, jak i jądra
systemu) czas CPU wykonywania się  procesu. (Obliczenia obejmują czas CPU
zużyty przez wszystkie wątki procesu). Po każdorazowym wygaśnięciu
generowany jest sygnał \fBSIGPROF\fP.
.IP
W powiązaniu z \fBITIMER_VIRTUAL\fP ten czasomierz zwykle jest  używany  do
profilowania czasu używanego przez aplikację zarówno w przestrzeni
użytkownika, jak i jądra.
.PP
Proces ma tylko po jednym czasomierzu każdego z tych trzech typów.
.PP
Wartości czasomierza są zdefiniowane za pomocą następujących struktur:
.PP
.in +4n
.EX
struct itimerval {
    struct timeval it_interval; /* Interwał czasomierza periodycznego */
    struct timeval it_value;    /* Czas do następnego wygaśnięcia */
};
\&
struct timeval {
    time_t      tv_sec;         /* sekundy */
    suseconds_t tv_usec;        /* mikrosekundy */
};
.EE
.in
.\"
.SS getitimer()
Funkcja \fBgetitimer\fP() wypełnia bufor wskazywany przez \fIcurr_value\fP
bieżącym wskazaniem czasomierza podanego w parametrze \fIwhich\fP.
.PP
Do struktury \fIit_value\fP jest wpisywana ilość czasu, który pozostał podanemu
czasomierzowi do następnego wygaśnięcia. Wartość ta się zmienia podczas
odliczania przez czasomierz i zostanie ustawiona na \fIit_interval\fP, gdy
czasomierz wygaśnie. Obie wartości \fIit_value\fP równe zero oznaczają, że
podany czasomierz nie jest obecnie aktywny.
.PP
Struktura w \fIit_interval\fP jest ustawiana na odstęp pomiędzy kolejnymi
wygaśnięciami czasomierza. Oba pola w \fIit_interval\fP równe zero oznaczają
czasomierz jednorazowy (czyli, że wygasa tylko raz).
.SS setitimer()
Funkcja \fBsetitimer\fP(2) włącza lub wyłącza czasomierz podany w argumencie
\fIwhich\fP, ustawiając czasomierz na wartość podaną w \fInew_value\fP. Jeśli
\fIold_value\fP jest różne od NULL, to bufor, na który wskazuje, jest używany
do zwrócenia poprzedniej wartości czasomierza (to jest ta sama informacja,
którą zwraca \fBgetitimer\fP()).
.PP
Jeśli którekolwiek pole w \fInew_value.it_value\fP jest niezerowe, to
czasomierz jest aktywowany i ustawiony tak, żeby początkowo wygasł w podanym
czasie. Jeśli oba pola w \fInew_value.it_value\fP mają wartość zero, to
czasomierz jest wyłączony.
.PP
Pole \fInew_value.it_interval\fP określa nowy interwał dla czasomierza, jeśli
oba pola w nim zawarte mają wartość zero, to jest to czasomierz jednorazowy.
.SH "WARTOŚĆ ZWRACANA"
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest \-1 i
ustawiane jest \fIerrno\fP wskazując błąd.
.SH BŁĘDY
.TP 
\fBEFAULT\fP
\fInew_value\fP, \fIold_value\fP lub \fIcurr_value\fP nie jest poprawnym wskaźnikiem.
.TP 
\fBEINVAL\fP
\fIwhich\fP nie jest jednym z \fBITIMER_REAL\fP, \fBITIMER_VIRTUAL\fP lub
\fBITIMER_PROF\fP albo (od Linuksa 2.6.22) jedno z pól \fItv_usec\fP w strukturze
wskazywanej przez \fInew_value\fP zawiera wartość spoza zakresu od 0 do 999999.
.SH WERSJE
Standardy nie określają znaczenia poniższego wywołania:
.PP
.in +4n
.EX
setitimer(which, NULL, &old_value);
.EE
.in
.PP
Wiele systemów (Solaris, systemy BSD i być może również inne) traktuje to
jako równoważne z:
.PP
.in +4n
.EX
getitimer(which, &old_value);
.EE
.in
.PP
Pod Linuksem jest to odpowiednikiem wywołania, w którym pola \fInew_value\fP są
ustawione na zero, to jest czasomierz jest wyłączany. \fIProsimiy o nieużywanie tej właściwości Linuksa\fP: jest nieprzenośna i niepotrzebna.
.SH STANDARDY
POSIX.1\-2008.
.SH HISTORIA
POSIX.1\-2001, SVr4, 4.4BSD (to wywołanie najpierw pojawiło się w
4.2BSD). POSIX.1\-2008 uznaje \fBgetitimer\fP() i \fBsetitimer\fP() za
przestarzałe, zalecając zamiast nich używanie API POSIX\-owych czasomierzy
(\fBtimer_gettime\fP(2), \fBtimer_settime\fP(2) i tak dalej).
.SH UWAGI
Ważność czasomierzy nigdy nie upływa przed zadanym czasem, natomiast może
ona upłynąć jakiś (krótki) czas później, co zależy od rozdzielczości zegara
systemowego  i obciążenia systemu, patrz \fBtime\fP(7) (patrz także rozdział
USTERKI poniżej). Jeśli czas ważności upływa, gdy proces jest aktywny (jest
to zawsze prawda dla \fBITIMER_VIRTUAL\fP), to sygnał zostanie dostarczony
natychmiast po wygenerowaniu.
.PP
Dziecko utworzone przez \fBfork\fP(2) nie dziedziczy czasomierzy interwałowych
rodzica. Jednakże czasomierze te są zachowywane przez \fBexecve\fP(2).
.PP
POSIX.1 nie określa interakcji pomiędzy \fBsetitimer\fP() i trzema interfejsami
\fBalarm\fP(2), \fBsleep\fP(3) oraz \fBusleep\fP(3).
.SH 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
\fBITIMER_REAL\fP może upłynąć wcześniej, niż sygnał poprzedniego
przeterminowania zostanie dostarczony. Drugi sygnał w takiej sytuacji
zostanie utracony.
.PP
Przed Linuksem 2.6.16 wartości czasomierzy są przedstawiane w jednostkach
jiffies. Jeśli żądane jest ustawienie czasomierza na wartość, której
reprezentacja w jiffies przekracza \fBMAX_SEC_IN_JIFFIES\fP (zdefiniowany w
\fIinclude/linux/jiffies.h\fP), to czasomierz jest po cichu obcinany do tej
wartości progowej. W systemie Linux/i386 (gdzie od Linuksa 2.6.13 wartość
jednego jiffy jest równa 0,004 sekundy), oznacza to, że wartość progowa
czasomierza w przybliżeniu wynosi 99,42 dni. Od Linuksa 2.6.16 jądro używa
innej wewnętrznej reprezentacji czasów i to ograniczenie jest usunięte.
.PP
.\" 4 Jul 2005: It looks like this bug may remain in Linux 2.4.x.
.\"	http://lkml.org/lkml/2005/7/1/165
Jądra Linux wcześniejsze niż Linux 2.6.12 miały na niektórych systemach
(włączając w to i386) błąd powodujący w pewnych sytuacjach ciągłe wygaszanie
czasomierza, nawet co jedno jiffy. Błąd został poprawiony w Linuksie 2.6.12.
.PP
.\" Bugzilla report 25 Apr 2006:
.\" http://bugzilla.kernel.org/show_bug.cgi?id=6443
.\" "setitimer() should reject noncanonical arguments"
POSIX.1\-2001 mówi, że \fBsetitimer\fP() powinno zwrócić błąd, jeśli wartość
\fItv_usec\fP jest spoza zakresu [0, 999999]. Jednakże w jądrach aż do Linuksa
2.6.21 włącznie tak się nie działo. Zamiast tego Linux odpowiednio
uaktualniał liczbę sekund (\fItv_sec\fP) czasomierza. W wersji Linuksa 2.6.22
ta niezgodność ze standardem została naprawiona: niepoprawna wartość
\fItv_usec\fP powoduje zwrócenie błędu \fBEINVAL\fP.
.SH "ZOBACZ TAKŻE"
\fBgettimeofday\fP(2), \fBsigaction\fP(2), \fBsignal\fP(2), \fBtimer_create\fP(2),
\fBtimerfd_create\fP(2), \fBtime\fP(7)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Przemek Borys <pborys@dione.ids.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>,
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
