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

名称

getitimer, setitimerインターバルタイマの値を取得/設定

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/time.h>

#define ITIMER_REAL 0
#define ITIMER_VIRTUAL 1
#define ITIMER_PROF 2

int
getitimer( int which, struct itimerval *value);

int
setitimer( int which, const struct itimerval *value, struct itimerval *ovalue);

解説

システムは、各プロセスに < sys/time.h> で定義された 3 つのインターバルタイマを提供しています。 getitimer() システムコールは、 which で指定されたタイマの現在の値を value 構造体に返します。 setitimer() システムコールは、タイマを指定の value に設定します ( ovalue が NULL ポインタでない場合、タイマの以前の値が返されます)。

タイマの値は、 itimerval 構造体によって定義されます:

struct itimerval { 
 struct timeval it_interval; /* タイマインターバル */ 
 struct timeval it_value; /* 現在の値 */ 
};

it_value が 0 でない場合、それは、次にタイマが時間切れになるまでの時間を示します。 it_interval が 0 でない場合、それは、タイマが時間切れになるときに it_value を再設定するのに使用される値を指定します。 it_value を 0 に設定すると、タイマは、 it_interval の値に関係なく無効になります。 it_interval を 0 に設定すると、次の時間切れの後でタイマは、無効になります ( it_value が 0 でないと想定します)。

システムクロックの精度 (通常は、10 ミリ秒です) より小さい時間の値は、この精度に切り上げられます。

ITIMER_REAL タイマは、リアルタイムで減少していきます。このタイマが時間切れになると SIGALRM シグナルが配信されます。

ITIMER_VIRTUAL タイマは、プロセス仮想時間で減少します。このタイマが減るのは、プロセスが実行中のときだけです。時間切れになるときに SIGVTALRM シグナルが配信されます。

ITIMER_PROF タイマは、プロセス仮想時間内およびシステムがプロセスのために処理を行っているときの両方で減少します。これは、インタプリタがプログラムの実行を統計的にプロファイルするときに使用するように設計されています。 ITIMER_PROF タイマが時間切れになるたびに SIGPROF シグナルが配信されます。このシグナルは、進行中のシステムコールに割り込むかもしれないので、このタイマを使用しているプログラムは、割り込まれたシステムコールを再実行する準備をしておかなければなりません。

setitimer() で it_intervalit_value に許容される最大秒数は、100000000 です。

時間の値を操作する 3 つのマクロは、 < sys/time.h> で定義されています。 timerclear() マクロは、時間の値を 0 に設定し、 timerisset() は、時間値が 0 でないかどうか検査し、 timercmp() は、2 つの時間の値を比較します。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

getitimer() と setitimer() システムコールは、次の場合に失敗します:
[ EFAULT]
value 引数が無効なアドレスを指定しました。
[ EINVAL]
value 引数が、大きすぎて処理できない時間を指定しました。

歴史

getitimer() システムコールは、 4.2BSD で登場しました。
May 16, 1995 FreeBSD