> Linux Reviews > man >

clock_getres


  1. clock_getres.2.man
  2. clock_getres.3.man


1. clock_getres.2.man

Manpage of CLOCK_GETRES

CLOCK_GETRES

Section: Руководство программиста Linux (2)
Updated: 2010-02-03
Index Return to Main Contents
 

ИМЯ

clock_getres, clock_gettime, clock_settime - функции часов и времени  

ОБЗОР

#include <time.h>

int clock_getres(clockid_t clk_id, struct timespec *res);

int clock_gettime(clockid_t clk_id, struct timespec *tp);

int clock_settime(clockid_t clk_id, const struct timespec *tp);

Компонуется при указании параметра -lrt.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

clock_getres(), clock_gettime(), clock_settime():

_POSIX_C_SOURCE >= 199309L
 

ОПИСАНИЕ

Функция clock_getres() определяет разрешающую способность (точность) заданных в clk_id часов, и, если res не равно NULL, сохраняет её в struct timespec, указанную в res. Точность часов зависит от реализации и не может быть настроена определённым процессом. Если значение времени, указанное в аргументе tp функции clock_settime(), не кратно res, то оно усекается до кратного res.

Функции clock_gettime() и clock_settime() получают и устанавливают время указанных часов clk_id.

Аргументы res и tp представляют структуру timespec, определённую в <time.h>:

struct timespec {
    time_t   tv_sec;        /* секунды */
    long     tv_nsec;       /* наносекунды */
};

Аргумент clk_id представляет идентификатор определённых часов, над которыми производится действие. Часы могут использоваться системой в целом и поэтому видимы всем процессам или конкретного процессу, если они отсчитывают время только в пределах одного процесса.

Все реализации поддерживают системные часы реального времени, которые имеют идентификатор CLOCK_REALTIME. Их время представляется в секундах и наносекундах с начала Эпохи. Когда их время изменяется, на таймеры с относительными интервалами это никак не влияет, но таймеры с абсолютной точкой во времени учитывают это.

Может быть реализовано много часов. Представление соответствующих значений времени и влияние на таймеры не определено.

В последних версиях glibc и ядра Linux поддерживаются следующие часы:

CLOCK_REALTIME
Системные часы реального времени. Для настройки этих часов требуются соответствующие права.
CLOCK_MONOTONIC
Часы, которые не могут быть настроены и показывают одно время с момента некой неопределённой начальной точки.
CLOCK_MONOTONIC_RAW (начина с Linux 2.6.28; есть только в Linux)
Похожи на CLOCK_MONOTONIC, предоставляют прямой доступ к аппаратным часам, которые не подводятся NTP.
CLOCK_PROCESS_CPUTIME_ID
Таймер высокого разрешения, работающий на ЦП, на каждый процесс.
CLOCK_THREAD_CPUTIME_ID
Часы, работающие на ЦП, для каждой нити.
 

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении функции clock_gettime(), clock_settime() и clock_getres() возвращают 0, или -1 в случае ошибки (errno устанавливается в соответствующее значение).  

ОШИБКИ

EFAULT
tp указывает за пределы доступного адресного пространства.
EINVAL
Заданное в clk_id значение не поддерживается на этой системе.
EPERM
Для установки указанных часов с помощью clock_settime() недостаточно прав.
 

СООТВЕТСТВИЕ СТАНДАРТАМ

SUSv2, POSIX.1-2001.  

ДОСТУПНОСТЬ

На POSIX-системах, в которых доступны эти функции, символ _POSIX_TIMERS, определённый в <unistd.h>, имеет значение больше 0. Символами _POSIX_MONOTONIC_CLOCK, _POSIX_CPUTIME, _POSIX_THREAD_CPUTIME показывается, что доступны CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID. (см. также sysconf(3).)  

ЗАМЕЧАНИЯ

 

Замечание для многопроцессорных систем

Часы CLOCK_PROCESS_CPUTIME_ID и CLOCK_THREAD_CPUTIME_ID реализованы на многих платформах с помощью таймеров ЦП (TSC на i386, AR.ITC на Itanium). Эти регистры могут отличаться между ЦП и, как следствие, эти часы могут возвращать поддельные результаты, если выполнение процесса переходит на другой ЦП.

Если процессоры в многопроцессорных системах используют разные источники времени, то нет способа поддерживать сверку между регистрами таймера, так как каждый ЦП будет работать со слегка отличающейся частотой. В этом случае clock_getcpuclockid(0) вернёт ENOENT, чтобы указать на это состояние. Двое часов в этом случае будут полезны, только если можно убедиться, что процесс остался на определённом ЦП.

Процессоры в многопроцессорных системах не приступают к работе одновременно и поэтому регистры таймера обычно работают со смещением. Некоторые архитектуры содержат код, который пытается сократить это смещение при загрузке системы. Однако код не может гарантировать точную подстройку смещений. В glibc нет средств для работы с этими смещениями (в отличие от ядра Linux). Обычно, эти смещения малы и поэтому, в большинстве случаев, их влияние незначительно.  

ДЕФЕКТЫ

Согласно POSIX.1-2001, процесс с "соответствующими правами" может настроить часы CLOCK_PROCESS_CPUTIME_ID и CLOCK_THREAD_CPUTIME_ID с помощью clock_settime(). В Linux эти часы не допускают настройку (т.е., процесс не может иметь "соответствующие права").  

СМОТРИТЕ ТАКЖЕ

date(1), adjtimex(2), gettimeofday(2), settimeofday(2), time(2), clock_getcpuclockid(3), ctime(3), ftime(3), pthread_getcpuclockid(3), sysconf(3), time(7)


 

Index

ИМЯ
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
СООТВЕТСТВИЕ СТАНДАРТАМ
ДОСТУПНОСТЬ
ЗАМЕЧАНИЯ
Замечание для многопроцессорных систем
ДЕФЕКТЫ
СМОТРИТЕ ТАКЖЕ

This document was created by man2html using the manual pages.
Time: 17:41:12 GMT, October 23, 2013

2. clock_getres.3.man

Invalid Manpage

Invalid Manpage

The requested file (stdin) is not a valid (unformatted) man page.

SVENSKA - SVENSKA - ja