时钟 (时钟) ,时钟 (时钟) 和时钟 (时钟) 时间子例程

用途

时钟和计时器功能。

标准 C 库 (libc.a)

语法

#include <time.h>

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

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

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

描述

clock_getres 子例程返回任何时钟的分辨率。 时钟分辨率是由实现定义的,不能由进程设置。 如果 res 参数不为 NULL ,那么指定时钟的分辨率将存储在 res 参数指向的位置。 如果 res 参数为 NULL ,那么不返回时钟分辨率。 如果 clock_settime 子例程的 time 参数不是 res 参数的倍数,那么该值将截断为 res 参数的倍数。

clock_gettime 子例程返回指定时钟 clock_id的当前值 tp

clock_settime 子例程将指定的时钟 clock_id设置为 tp 参数指定的值。 在指定时钟的分辨率的两个连续非负整数倍之间的时间值将被截断为分辨率的较小倍数。

时钟可以是系统范围的 (对所有进程可见) ,也可以是每个进程的 (测量仅在进程中有意义的时间)。 所有实现都支持 time.h 文件中定义的 CLOCK_REALTIMEclock_id 。 此时钟表示系统的实时时钟。 对于此时钟,由 clock_gettime 子例程返回并由 clock_settime 子例程指定的值表示自戳记以来的时间量 (以秒和纳秒为单位)。

如果 CLOCK_REALTIME 时钟的值是通过 clock_settime 子例程设置的,那么该时钟的新值用于根据 CLOCK_REALTIME 时钟确定绝对时间服务的到期时间。 这适用于武装绝对计时器到期的时间。 如果在调用此类时间服务时请求的绝对时间早于时钟的新值,那么时间服务将立即到期,就像时钟已正常达到所请求的时间一样。

通过 clock_settime 子例程设置 CLOCK_REALTIME 时钟的值不会影响基于此时钟 (包括 nanosleep 子例程) 等待相对时间服务的线程,也不会影响基于此时钟的相对计时器到期。 因此,当请求的相对时间间隔已过时,这些时间服务将到期,而与时钟的新值或旧值无关。

time.h 文件中定义了 CLOCK_MONOTONICclock_id 。 此时钟表示系统的单调时钟。 对于此时钟, clock_gettime 子例程返回的值表示自过去未指定点以来的时间量 (以秒和纳秒为单位)。 此点在系统启动时间之后不会更改 (例如,此时钟不能具有向后跳跃)。 不能通过 clock_settime 子例程设置 CLOCK_MONOTONIC 时钟的值。 如果使用 CLOCK_MONOTONICclock_id 参数调用此子例程,那么此子例程将失败。

调用进程应该具有 SYS_OPER 权限来设置 CLOCK_REALTIME 时钟的值。

系统支持进程 CPU 时间时钟。 对于这些时钟,由 clock_gettime 返回并由 clock_settime 指定的值表示与时钟关联的进程的执行时间量。 通过调用 Clock_getcpuclockid来获取 CPU 时间时钟的 Clockid_t 值。 在 time.h 文件中定义了特殊的 clockid_tCLOCK_PROCESS_CPUTIME_ID。 此值表示调用 clock_ *timer_ * 函数之一时调用进程的 CPU 时间时钟。

要获取或设置 CPU 时间时钟的值,调用进程必须具有 root 用户许可权,或者具有与拥有目标 CPU 时间时钟的进程相同的有效用户标识或实际用户标识。 同一规则适用于尝试获取 CPU 时间时钟的解析的进程。

系统支持线程 CPU 时间时钟。 对于这些时钟,由 clock_gettime 返回并由 clock_settime 指定的值表示与时钟关联的线程的执行时间量。 通过调用 pthread_getcpuclockid 子例程来获取线程 CPU 时间时钟的 时钟 值。 在 time.h 文件中定义了特殊的 clockid_tCLOCK_THREAD_CPUTIME_ID。 此值表示调用 clock_ * ()timer_ * 函数之一时调用线程的线程 CPU 时间时钟。

要获取或设置线程 CPU 时间时钟的值,调用线程必须是与拥有目标线程 CPU 时间时钟的线程在同一进程中的线程。 同一规则适用于尝试获取线程 CPU 时间时钟的解析的线程。

参数

描述
时钟标识 指定时钟。
恢复 存储指定时钟的分辨率。
TP 存储指定时钟的当前值。

返回值

如果成功,将返回 0。 如果不成功,将返回-1并设置errno以指示错误。

错误代码

如果发生以下情况,那么 clock_getresclock_gettimeclock_settime 子例程将失败:
描述
EINVAL clock_id 参数未指定已知时钟。
ENOTSUP 此函数不受 checkpoint-restart 进程支持。
如果发生以下情况, clock_settime 子例程将失败:
描述
EINVAL clock_settime 子例程的 tp 参数超出给定时钟标识的范围。
EINVAL tp 参数指定了小于零或大于或等于 1000 万的纳秒值。
EINVAL clock_id 自变量的值为 CLOCK_MONOTONIC
如果发生下列情况, clock_settime 子例程可能会失败:
描述
EPERM 请求进程没有设置指定时钟的相应特权。