1 .\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
2 .\" <mtk.manpages@gmail.com>
4 .\" %%%LICENSE_START(VERBATIM)
5 .\" Permission is granted to make and distribute verbatim copies of this
6 .\" manual provided the copyright notice and this permission notice are
7 .\" preserved on all copies.
9 .\" Permission is granted to copy and distribute modified versions of this
10 .\" manual under the conditions for verbatim copying, provided that the
11 .\" entire resulting derived work is distributed under the terms of a
12 .\" permission notice identical to this one.
14 .\" Since the Linux kernel and libraries are constantly changing, this
15 .\" manual page may be incorrect or out-of-date. The author(s) assume no
16 .\" responsibility for errors or omissions, or for damages resulting from
17 .\" the use of the information contained herein. The author(s) may not
18 .\" have taken the same level of care in the production of this manual,
19 .\" which is licensed free of charge, as they might when working
22 .\" Formatted or processed versions of this manual, if unaccompanied by
23 .\" the source, must acknowledge the copyright and authors of this work.
26 .\"*******************************************************************
28 .\" This file was generated with po4a. Translate the source file.
30 .\"*******************************************************************
32 .\" Japanese Version Copyright (c) 2008 Akihiro MOTOKI
33 .\" all rights reserved.
34 .\" Translated 2008-08-21, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.04
36 .TH CLOCK_NANOSLEEP 2 2014\-12\-31 Linux "Linux Programmer's Manual"
38 clock_nanosleep \- 指定したクロックでの高精度な実行停止 (sleep)
40 \fB#include <time.h>\fP
43 \fBint clock_nanosleep(clockid_t \fP\fIclock_id\fP\fB, int \fP\fIflags\fP\fB,\fP
44 \fB const struct timespec *\fP\fIrequest\fP\fB,\fP
45 \fB struct timespec *\fP\fIremain\fP\fB);\fP
48 \fI\-lrt\fP とリンクする (バージョン 2.17 より前の glibc のみ)
52 glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照):
55 \fBclock_nanosleep\fP():
57 _XOPEN_SOURCE\ >=\ 600 || _POSIX_C_SOURCE\ >=\ 200112L
61 \fBclock_nanosleep\fP() を使うと、 \fBnanosleep\fP(2)
62 同様、ナノ秒の精度で指定された期間だけ呼び出したスレッドの実行を 停止することができる。 \fBnanosleep\fP(2)
63 と違うのは、呼び出し側が停止期間をどのクロックに対して計測するのかを選択 できる点と、停止期間を絶対値でも相対値でも指定できる点である。
65 このシステムコールに渡したり、このシステムコールが返したりする時間の値は \fItimespec\fP
66 構造体を使って指定される。この構造体の定義は以下の通りである。
71 time_t tv_sec; /* seconds */
72 long tv_nsec; /* nanoseconds [0 .. 999999999] */
77 \fIclock_id\fP 引き数で、停止期間をどのクロックに対して計測するかを指定する。 この引き数には以下の値のいずれか一つを指定できる。
80 システム全体で使われる実時間クロック。 このクロックは変更可能である。
83 .\" On Linux this clock measures time since boot.
84 過去のある時点からの時間を計測する、単調増加のクロック。 起点となる時点はシステム起動後には変更されない。 このクロックは変更することができない。
86 \fBCLOCK_PROCESS_CPUTIME_ID\fP
87 .\" There is some trickery between glibc and the kernel
88 .\" to deal with the CLOCK_PROCESS_CPUTIME_ID case.
89 そのプロセスの全スレッドで消費される CPU 時間を計測するプロセス単位の クロック。このクロックは設定可能である。
91 See \fBclock_getres\fP(2) for further details on these clocks. In addition,
92 the CPU clock IDs returned by \fBclock_getcpuclockid\fP(3) and
93 \fBpthread_getcpuclockid\fP(3) can also be passed in \fIclock_id\fP.
95 \fIflags\fP が 0 の場合、 \fIrequest\fP に指定された値は \fIclock_id\fP
96 で指定されたクロックの現在の値からの相対的な期間と解釈される。
98 \fIflags\fP が \fBTIMER_ABSTIME\fP の場合、 \fIrequest\fP は指定されたクロックで計測される絶対時刻と解釈される。
99 \fIrequest\fP が指定されたクロックの現在の値以下の場合、 \fBclock_nanosleep\fP()
100 は、呼び出したスレッドの停止を行わず、すぐに返る。
102 \fBclock_nanosleep\fP() は、少なくとも \fIrequest\fP で指定された時間が経過するまで、呼び出したスレッドの実行を停止する。
103 シグナルハンドラが呼び出されたり、そのプロセスを終了させるような シグナルが配送されたりした場合にも、スレッドの実行停止は終了する。
105 呼び出しがシグナルハンドラによって割り込まれた場合、 \fBclock_nanosleep\fP() はエラー \fBEINTR\fP で失敗する。さらに、
106 \fIremain\fP が NULL でなく、かつ \fIflags\fP が \fBTIMER_ABSTIME\fP でない場合には、 \fIremain\fP
107 に残りの停止時間が返される。 この値を使って \fBclock_nanosleep\fP() を再度呼び出すことで、(相対的な期間の)
110 要求された期間の停止に成功すると、 \fBclock_nanosleep\fP() は 0 を返す。
111 シグナルハンドラで割り込まれたり、エラーが発生したりした場合、 「エラー」の節のリストにある正のエラー番号のいずれか一つを返す。
115 \fIrequest\fP や \fIremain\fP に無効なアドレスが指定された。
118 停止がシグナルハンドラにより割り込まれた。
121 \fItv_nsec\fP フィールドの値が 0 から 999999999 の範囲でないか、 \fItv_sec\fP の値が負であった。
124 \fIclock_id\fP が無効であった (\fBCLOCK_THREAD_CPUTIME_ID\fP が \fIclock_id\fP として有効な値ではない)。
126 \fBclock_nanosleep\fP() システムコールは Linux 2.6 で初めて登場した。 glibc ではバージョン 2.1
131 \fIrequest\fP で指定された停止期間が、時間の計測に使用されるクロック (\fBtime\fP(7) 参照)
132 の精度の倍数ちょうどでない場合、停止期間は一番近い次の倍数に 切り上げられる。さらに、停止が完了した後に、CPU が呼び出したスレッドを
133 もう一度実行できるようになるまでには、遅延が入る可能性がある。
135 絶対値指定のタイマーを使うのは、 \fBnanosleep\fP(2) に書かれている類のタイマーのずれの問題を防止するのに役立つ
136 (この種の問題は、シグナルに割り込まれた際に相対指定の停止を 繰り返し再開しようとするプログラムでは、かえって悪化する)。
137 これらの問題を回避して相対指定の停止を実行するには、 希望するクロックで \fBclock_gettime\fP(2)
138 を呼び出し、その返り値の時刻値に希望する期間を加算してから、 \fBTIMER_ABSTIME\fP フラグを指定して
139 \fBclock_nanosleep\fP() を呼び出す。
141 \fBsigaction\fP(2) で \fBSA_RESTART\fP フラグが指定されているかに関わらず、シグナルハンドラにより割り込まれた後に
142 \fBclock_nanosleep\fP() が再開されることは決してない。
144 \fIflags\fP が \fBTIMER_ABSTIME\fP の場合、 \fIremain\fP 引き数は使用されず、不要である (絶対値での停止では、同じ
145 \fIrequest\fP 引き数を使って再度呼び出すことができる)。
147 POSIX.1 の規定では、 \fBclock_nanosleep\fP() はシグナルの処理方法やシグナルマスクに影響を与えない、とされている。
149 POSIX.1 の規定では、 \fBclock_settime\fP(2) で \fBCLOCK_REALTIME\fP クロックの値を変更した後は、絶対値指定の
150 \fBclock_nanosleep\fP() で停止しているスレッドを起動させる時刻の判定は、 新しいクロック値を使って行われる、とされている。
151 新しいクロック値において停止期間の終了時刻が過去になってしまった場合には、 \fBclock_nanosleep\fP() はすぐに返ることになる。
153 POSIX.1 の規定では、 \fBclock_settime\fP(2) で \fBCLOCK_REALTIME\fP クロックの値を変更しても、相対値指定の
154 \fBclock_nanosleep\fP() で停止しているスレッドには影響を与えない、とされている。
156 \fBclock_getres\fP(2), \fBnanosleep\fP(2), \fBrestart_syscall\fP(2),
157 \fBtimer_create\fP(2), \fBsleep\fP(3), \fBusleep\fP(3), \fBtime\fP(7)
159 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.76 の一部
160 である。プロジェクトの説明とバグ報告に関する情報は
161 http://www.kernel.org/doc/man\-pages/ に書かれている。