转载自 http://man7.org/linux/man-pages/man2/clock_nanosleep.2.html
保存备忘,方便查找,侵删。
CLOCK_NANOSLEEP(2)Linux程序员手册CLOCK_NANOSLEEP(2)
NAME
clock_nanosleep-具有指定时钟的高分辨率睡眠
大纲
#include <time.h>
与-lrt链接(仅适用于2.17之前的glibc版本)。
glibc的功能测试宏要求(请参阅feature_test_macros(7)):clock_nanosleep():
_POSIX_C_SOURCE> = 200112L
说明
像nanosleep 一样,clock_nanosleep()允许调用线程以
纳秒精度指定的时间间隔进行睡眠。它的
不同之处在于允许调用者选择
要测量睡眠间隔的时钟,并且允许将睡眠间隔
指定为绝对值或相对值。
传递给此调用并由该调用返回的时间值是
使用timespec结构指定的,该结构定义如下:
所述clock_id参数指定针对其睡眠时钟
间隔将被测量。该参数可以具有 以下值之一:
CLOCK_REALTIME 可设置的系统范围的实时时钟。
CLOCK_MONOTONIC 一个不可设置的,单调递增的时钟,用于测量从
过去某个未指定的点开始的时间,该时间在系统启动后不会更改。
CLOCK_PROCESS_CPUTIME_ID 可设置的每个进程时钟,用于测量进程中所有线程消耗的CPU时间。
返回值
在请求的时间间隔内成功睡眠后,
clock_nanosleep()返回0。如果调用被信号
处理程序中断或遇到错误,则它将返回
ERRORS中列出的正错误号之一。
错误
EFAULT 请求或保持指定的无效地址。EINTR 睡眠被信号处理程序中断;参见signal(7)。EINVAL tv_nsec字段中的值不在0到
999999999 的范围内,或者tv_sec为负。EINVAL clock_id无效。(CLOCK_THREAD_CPUTIME_ID不是
用于允许值clock_id。)
版本
该clock_nanosleep()系统调用首次出现在Linux 2.6中。
从2.1版开始,glibc就提供了支持。
符合
POSIX.1-2001,POSIX.1-2008。
笔记
如果请求中指定的间隔不是
底层时钟的精确整数倍(请参见time(7)),则该间隔将
舍入为下一个整数。此外,在睡眠
完成之后,在CPU可以自由
再次执行调用线程之前,可能还会有一个延迟。
无论使用sigaction()SA_RESTART 标志如何,
clock_nanosleep()都不会在被信号处理程序中断后重新启动。
当标志是TIMER_ABSTIME,remain 是不使用的,不必要的(可以使用相同的request参数重新启动绝对睡眠)
POSIX.1指定clock_nanosleep()对信号
配置或信号掩码没有影响。
POSIX.1指定在
通过clock_settime(2)更改CLOCK_REALTIME时钟的值之后,新的时钟值将用于
确定在绝对clock_nanosleep()上阻塞的线程将唤醒的时间;如果新的时钟值超过了
睡眠间隔的末尾,则clock_nanosleep()调用将
立即返回。
POSIX.1指定
通过clock_settime(2)更改CLOCK_REALTIME时钟的值
对相对Clock_nanosleep()阻塞的线程无效。
另请参阅
clock_getres(2),nanosleep(2),restart_syscall(2),timer_create(2),
sleep(3),usleep(3),time(7)
版权页
该页面是Linux 手册页项目5.04版的一部分。
可以在https://www.kernel.org/doc/man-pages/上找到
该项目的描述,有关错误报告的信息以及此页面的最新版本。Linux 2017年9月15日CLOCK_NANOSLEEP(2)