EN JA
TIMER_SETTIME(2)
TIMER_SETTIME(2) FreeBSD System Calls Manual TIMER_SETTIME(2)

名称

timer_getoverrun, timer_gettime, timer_settimeプロセス毎のタイマ (リアルタイム)

ライブラリ

POSIX Real-time Library (librt, -lrt)

書式

#include < time.h>

int
timer_getoverrun( timer_t timerid);

int
timer_gettime( timer_t timerid, struct itimerspec *value);

int
timer_settime( timer_t timerid, int flags, const struct itimerspec *restrict value, struct itimerspec *restrict ovalue);

解説

timer_gettime() システムコールは、指定されたタイマ timerid の期限が切れるまで、時間の合計を格納し、 value 引数によって指された空間にタイマの値をリロードします。この構造体の it_value メンバは、タイマの期限が切れる前の時間の合計を含むか、タイマが武装を解除されるなら、0 を含みます。この値は、たとえタイマが絶対的な時間で武装していたとしても、タイマの期限が切れるまで、インターバルとして返されます。訳注: arm 武装する、disarm 武装を解除する、の適切な訳が思い付きません。 valueit_interval メンバは、最後に timer_settime() によって設定された値の再ロードを含みます。

timer_settime() システムコールは、 value 引数の it_value メンバから timerid によって指定されたタイマの次の期限切れまで、時間を設定し、 valueit_value メンバが 0 でないなら、タイマを武装します。 timer_settime() が呼び出されるとき、指定されたタイマが既に武装されているなら、この呼び出しは、指定された値への次の期限切れまで、時間をリセットします。 valueit_value メンバが 0 であるなら、タイマは武装を解除します。タイマが武装を解除されるなら、保留中 (pending) のシグナルは、削除されます。

フラグ TIMER_ABSTIME が引数 flags に設定されていないなら、まるで次の期限切れまで、 valueit_value メンバによって指定されたインターバルと等しく設定されるかのように、振る舞います。すなわち、タイマは呼び出しが行われるときからの it_value ナノ秒に期限が切れます。フラグ TIMER_ABSTIME が引数 flags に設定されているなら、まるで次の期限が切れるまで、時間が value の it_value メンバによって指定された絶対的な時間と timerid に関連しているクロックの現在の値の違いと等しく設定されるように、振る舞います。すなわち、クロックが valueit_value メンバによって指定された値に到達するとき、タイマは期限が切れます。指定された時間が既に経過しているなら、システムコールは成功し、期限切れの通知が行われます。

タイマの再ロード値は、 valueit_interval メンバによって指定された値に設定されます。タイマが 0 以外の it_interval で武装されるとき、周期的な (または、反復的な) タイマが指定されます。

指定されたタイマの精度 (resolution) の 2 つの連続した非負の整数の倍数の間にある時間の値は、精度のより大きい倍数まで四捨五入されます。量子化の誤差によって、タイマは、丸められた時間の値より早く期限が切れません。

引数 ovalueNULL でないなら、 timer_settime() システムコールは、タイマが期限が切れる前に、以前の時間を合計を表す値を ovalue によって参照される位置に格納するか、またはタイマが武装を解除されたなら、前のタイマと共に、値を再ロードし、0 を格納します。タイマは、それらのスケジュールされた時間の前に期限が切れません。

単一のシグナルのみが、いずれかの時点で、与えられたタイマのプロセスでキューに入れられます。シグナルがまだ保留中であるタイマが期限が切れるとき、シグナルは、キューに入れられず、タイマのオーバランが起こります。プロセスによってタイマの期限切れのシグナルが受け付けられるとき、 timer_getoverrun() システムコールは、指定されたタイマのためのタイマの期限切れオーバランのカウントを返します。生成された (キューに入れられた) シグナルとそれが受け付けられた時間の間に生じる、特別のタイマ期限切れの数を含んでいる返されたオーバランカウントは、最大{ DELAYTIMER_MAX}までです。そのような特別の期限切れの数が{ DELAYTIMER_MAX}以上であるなら、オーバランカウントは、{ DELAYTIMER_MAX}に設定されます。 timer_getoverrun() によって返された値は、タイマのための最新の期限切れのシグナル受け付けに適用されます。タイマのための期限切れのシグナルが配信されていないなら、 timer_getoverrun() の返り値は不特定です。

戻り値

timer_getoverrun() システムコールが成功するなら、上記で説明されるようにタイマの期限切れオーバランカウントを返します。そうでなければ、値 -1 が返され、グローバル変数 errno にエラーを示す値が設定されます。


The timer_gettime() and timer_settime() functions return the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

timer_settime() システムコールは、次の場合に失敗します:
[ EINVAL]
0 未満または 10 億以上のナノ秒の値で指定された value 構造体と、その構造体の it_value メンバは、0 秒とナノ秒を指定しませんでした。

これらのシステムコールは、次の場合に失敗します:

[ EINVAL]
timerid 引数は、 timer_create() によって返された ID に対応していませんが、 timer_delete() によってまだ削除されていません。

timer_settime() システムコールは、次の場合に失敗します:

[ EINVAL]
valueit_interval メンバは、0 ではなく、タイマは、新しいスレッド ( sigev_sigev_notifySIGEV_THREAD) の作成によって通知をつけて作成され、そして、固定のスタックアドレスは、 sigev_notify_attributes によって指されたスレッドの属性で設定されました。

timer_gettime() と timer_settime() システムコールは、次の場合に失敗します:

[ EFAULT]
任意の引数が、割り付けられたアドレス空間の外を指しているか、またはメモリプロテクションフォルトがあります。

規格

timer_getoverrun(), timer_gettime() と timer_settime() システムコールは、 IEEE Std 1003.1-2004 (“POSIX.1”) に適合しています。

歴史

POSIX のプロセス毎のタイマのサポートは、 FreeBSD 7.0 ではじめて登場しました。
September 11, 2000 FreeBSD