.\" -*- 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 "31 октября 2023 г." "Linux man\-pages 6.06" .SH ИМЯ getitimer, setitimer \- считывает или устанавливает значение таймера интервалов .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .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 ОПИСАНИЕ Данные системные вызовы предоставляют доступ к интервальным таймерам, то есть таймерам, у которых изначально истекает срок в будущем, и (необязательно) с регулярными интервалами после. Когда у таймера истекает срок, вызвавшему процессу отправляется сигнал и таймер перезапускается с задаваемым интервалом (если интервал не равен нулю). .P Three types of timers\[em]specified via the \fIwhich\fP argument\[em]are provided, each of which counts against a different clock and generates a different signal on timer expiration: .TP \fBITIMER_REAL\fP Этот таймер отсчитывается по реальному времени (то есть обычному). По каждому истечению выдаёт сигнал \fBSIGALRM\fP. .TP \fBITIMER_VIRTUAL\fP Этот таймер отсчитывается по времени ЦП в пользовательском режиме, проведённым процессом (учёт включает время ЦП, потреблённое всеми нитями процесса). По каждому истечению выдаёт сигнал \fBSIGVTALRM\fP. .TP \fBITIMER_PROF\fP Этот таймер отсчитывается по полному времени ЦП, потраченному процессом (учёт включает время ЦП, потреблённое всеми нитями процесса). По каждому истечению выдаёт сигнал \fBSIGPROF\fP. .IP Данный таймер вместе с \fBITIMER_VIRTUAL\fP можно использовать для профилирования затрат процессом системного и пользовательского времени ЦП. .P Процесс может иметь только по одному таймеру каждого типа. .P Величина, на которую устанавливается таймер, определяется следующими структурами: .P .in +4n .EX struct itimerval { struct timeval it_interval; /* Interval for periodic timer */ struct timeval it_value; /* Time until next expiration */ }; \& struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ }; .EE .in .\" .SS getitimer() Функция \fBgetitimer\fP() помещает текущее значение таймера, указанного в \fIwhich\fP, в буфер, указанный в \fIcurr_value\fP. .P Вложенная структура \fIit_value\fP содержит количество оставшегося времени до следующего истечения таймера. Это значение изменяется после начала отсчёта таймера и будет сброшено в \fIit_interval\fP при истечении таймера. Если оба поля \fIit_value\fP равны нулю, то это означает что таймер выключен (неактивен). .P Вложенная структура \fIit_interval\fP содержит интервал таймера. Если оба поля \fIit_interval\fPравны нулю, то это указывает на одноразовый таймер (то срабатывающий один раз). .SS setitimer() Функция \fBsetitimer\fP() настраивает таймер \fIwhich\fP значением \fInew_value\fP. Если значение \fIold_value\fP не NULL, то оно указывает на буфер, в который сохраняется предыдущее значение таймера (т. е., информация, возвращаемая \fBgetitimer\fP()). .P Если какое\-то из полей в \fInew_value.it_value\fP не равно нулю, то таймер изначально включается как просроченный на указанное время. Если оба поля в \fInew_value.it_value\fP равны нулю, то таймер отключён. .P Поле \fInew_value.it_interval\fP задаёт новый интервал таймера;если оба поля равны нулю, то таймер будет одноразовым. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, zero is returned. On error, \-1 is returned, and \fIerrno\fP is set to indicate the error. .SH ОШИБКИ .TP \fBEFAULT\fP Указатели \fInew_value\fP, \fIold_value\fP или \fIcurr_value\fP являются некорректными. .TP \fBEINVAL\fP \fIwhich\fP is not one of \fBITIMER_REAL\fP, \fBITIMER_VIRTUAL\fP, or \fBITIMER_PROF\fP; or (since Linux 2.6.22) one of the \fItv_usec\fP fields in the structure pointed to by \fInew_value\fP contains a value outside the range [0, 999999]. .SH ВЕРСИИ В стандартах ничего не говорится о значении вызова: .P .in +4n .EX setitimer(which, NULL, &old_value); .EE .in .P В многих системах (Solaris, BSD и, возможно, другие) он считается эквивалентом: .P .in +4n .EX getitimer(which, &old_value); .EE .in .P В Linux это эквивалентно вызову, в котором поля \fInew_value\fP равны 0, то есть таймер выключен. \fIНе используйте это особенность Linux\fP: это непереносимо и нецелесообразно. .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ POSIX.1\-2001, SVr4, 4.4BSD (впервые этот вызов появился в 4.2BSD). В POSIX.1\-2008 вызовы \fBgetitimer\fP() и \fBsetitimer\fP() помечены как устаревшие, и вместо них рекомендуется использовать программный интерфейс таймеров POSIX (\fBtimer_gettime\fP(2), \fBtimer_settime\fP(2) и т.д.). .SH ЗАМЕЧАНИЯ Срок на таймерах никогда не заканчивается ранее указанного времени, но может (чуть\-чуть) опоздать, что зависит от степени разрешения системного таймера и загрузки системы; смотрите \fBtime\fP(7) (но смотрите ДЕФЕКТЫ далее). Если время таймера истекает во время работы процесса (всегда, если используется \fBITIMER_VIRTUAL\fP), то сигнал после создания будет доставлен немедленно. .P Потомок, созданный через \fBfork\fP(2), не наследует таймеры интервалов родителя. При вызове \fBexecve\fP(2) таймеры интервалов сохраняются. .P В POSIX.1 не определено взаимодействие между \fBsetitimer\fP() и тремя интерфейсами: \fBalarm\fP(2), \fBsleep\fP(3) и \fBusleep\fP(3). .SH ДЕФЕКТЫ Генерирование и доставка сигнала разделены, и только один экземпляр каждого сигнала, которые описаны выше, может ожидать передачи в процесс. При очень большой нагрузке, ожидание таймера \fBITIMER_REAL\fP может завершиться раньше чем будет доставлен сигнал о предыдущем завершении. Второй сигнал об этом событии будет потерян. .P Before Linux 2.6.16, timer values are represented in jiffies. If a request is made set a timer with a value whose jiffies representation exceeds \fBMAX_SEC_IN_JIFFIES\fP (defined in \fIinclude/linux/jiffies.h\fP), then the timer is silently truncated to this ceiling value. On Linux/i386 (where, since Linux 2.6.13, the default jiffy is 0.004 seconds), this means that the ceiling value for a timer is approximately 99.42 days. Since Linux 2.6.16, the kernel uses a different internal representation for times, and this ceiling is removed. .P .\" 4 Jul 2005: It looks like this bug may remain in Linux 2.4.x. .\" http://lkml.org/lkml/2005/7/1/165 On certain systems (including i386), Linux kernels before Linux 2.6.12 have a bug which will produce premature timer expirations of up to one jiffy under some circumstances. This bug is fixed in Linux 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 says that \fBsetitimer\fP() should fail if a \fItv_usec\fP value is specified that is outside of the range [0, 999999]. However, up to and including Linux 2.6.21, Linux does not give an error, but instead silently adjusts the corresponding seconds value for the timer. From Linux 2.6.22 onward, this nonconformance has been repaired: an improper \fItv_usec\fP value results in an \fBEINVAL\fP error. .SH "СМ. ТАКЖЕ" \fBgettimeofday\fP(2), \fBsigaction\fP(2), \fBsignal\fP(2), \fBtimer_create\fP(2), \fBtimerfd_create\fP(2), \fBtime\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitry Bolkhovskikh , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .