.\" -*- coding: UTF-8 -*- .\" Copyright 7/93 by Darren Senn .\" and Copyright (C) 2016, Michael Kerrisk .\" 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 .\" 2005-04-06 mtk, Matthias Lang .\" Noted MAX_SEC_IN_JIFFIES ceiling .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH getitimer 2 "2 maja 2024 r." "Linux man\-pages 6.8" .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 \fP .P \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). .P 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. .P Proces ma tylko po jednym czasomierzu każdego z tych trzech typów. .P Wartości czasomierza są zdefiniowane za pomocą następujących struktur: .P .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. .P 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. .P 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()). .P 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. .P 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 \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: .P .in +4n .EX setitimer(which, NULL, &old_value); .EE .in .P Wiele systemów (Solaris, systemy BSD i być może również inne) traktuje to jako równoważne z: .P .in +4n .EX getitimer(which, &old_value); .EE .in .P 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. .P Dziecko utworzone przez \fBfork\fP(2) nie dziedziczy czasomierzy interwałowych rodzica. Jednakże czasomierze te są zachowywane przez \fBexecve\fP(2). .P 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. .P 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. .P .\" 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. .P .\" 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 , Andrzej Krzysztofowicz , Robert Luberda i Michał Kułach . .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 .