.\" Copyright 7/93 by Darren Senn .\" Based on a similar page Copyright 1992 by Rick Faith .\" May be freely distributed .\" Modified Tue Oct 22 00:22:35 EDT 1996 by Eric S. Raymond .\" .\" Дата последней коррекции перевода 29.05.2004 .\" Перевод с английского сделал Виктор Вислобоков .\" http://www.linuxshare.ru/projects/trans/mans.html .\" .TH GETITIMER 2 1993-08-05 "Linux 0.99.11" "Руководство программиста Linux" .SH ИМЯ getitimer, setitimer \- получить или установить значение внутреннего таймера .SH ОБЗОР .PD 0 .HP .B #include .sp .HP .B int getitimer(int .IB which , .B struct itimerval .BI * value ); .HP .B int setitimer(int .IB which , .B const struct itimerval .BI * value , .B struct itimerval .BI * ovalue ); .PD .SH ОПИСАНИЕ Система предоставляет каждому процессу три внутренних таймера, каждый из которых работает в отдельном временном домене. Когда любой из этих таймеров истекает, процессу, в котором функционировал данный таймер посылается сигнал и таймер (потенциально) перезапускается. .TP 1.5i .B ITIMER_REAL работает в реальном времени и по истечении отправляет сигнал .B SIGALRM . .TP .B ITIMER_VIRTUAL работает только, когда процесс выполняется и по истечении отправляет сигнал .B SIGVTALRM . .TP .B ITIMER_PROF работает и когда процесс выполняется, и когда система работает в интересах процесса. Запущенный совместно с .BR ITIMER_VIRTUAL , данный таймер обычно используется для профилирования времени, которое приложение проводит в режиме пользователя и в режиме ядра. По истечении отправляет сигнал .B SIGPROF . .LP Значения таймера задаются с помощью следующих структур: .PD 0 .RS .5i .nf struct itimerval { struct timeval it_interval; /* next value */ struct timeval it_value; /* current value */ }; struct timeval { long tv_sec; /* seconds */ long tv_usec; /* microseconds */ }; .fi .RE .PD .LP Фнкция .B getitimer заполняет структуру, предоставляемую как .I value текущими установками таймера, который обозначается как .I which (одно из значений .BR ITIMER_REAL , .BR ITIMER_VIRTUAL , или .BR ITIMER_PROF ). Элемент .B it_value устанавливает ожидаемое время, оставшееся на таймере или ноль если таймер запрещается. Похожим образом устанавливается .B it_interval для значения сброса. Функция .B setitimer устанавливает указанный таймер в значение, указанное в .IR value . Если .I ovalue не ноль, там будет сохранено старое значение таймера. .LP Таймеры уменьшающиеся от .I it_value до нуля, генерируют сигнал и сбрасываются в .IR it_interval . Таймер, который установлен в ноль .RI ( it_value является нулем или таймер истёк и .I it_interval является нулём) останавливается. .LP Оба значения .I tv_sec и .I tv_usec являются важными при определении длительности работы таймера. .LP Таймеры никогда не истекают до затребованного времени, напротив они немного запаздывают, в зависимости от шага системного таймера (в настоящий момент 10 миллисекунд). По истечении будет сгенерирован сигнал и произойдёт сброс таймера. Если таймер истекает в момент когда процесс активен (это всегда так для .BR ITIMER_VIRT ), то сигнал будет доставлен немедленно после генерации. В противном случае, доставка будет отложена на небольшое время, которое зависит от степени загрузки системы. .LP .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" В случае успеха, возвращается ноль. В случае ошибки, возвращается \-1 и значение .I errno устанавливается соответствующим образом. .SH ОШИБКИ .TP .B EFAULT .I value или .I ovalue не являются правильными указателями. .TP .B EINVAL .I which не является одним из значений .BR ITIMER_REAL , .BR ITIMER_VIRT , или .BR ITIMER_PROF . .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" SVr4, 4.4BSD (Данный вызов появился сперва в 4.2BSD). .SH "СМОТРИ ТАКЖЕ" .BR gettimeofday (2), .BR sigaction (2), .BR signal (2) .SH БАГИ Под Linux, генерация и доставка сигнала разделены и каждому сигналу разрешается генерировать только один недоставленный сигнал. Таким образом, получается, что при очень сильной загрузке системы, .B ITIMER_REAL таймер будет истекать перед тем как будет доставлен сигнал от предыдущего истекания таймера. Второй сигнал в этом случае будет потерян. .SH ПЕРЕВОД Перевёл с английского Виктор Вислобоков 2004