GETITIMER(2)

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

ライブラリ
libc

書式
<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 が nil でない場合、タイマの 以前の値が返されます)。

タイマの値は 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_interval と it_value に許容される最大秒数は 100000000 です。

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

戻り値

エラー
getitimer() と setitimer() システムコールは次の場合に失敗します:

[EFAULT]
    value 引数が無効なアドレスを指定しました。

[EINVAL]
    value 引数が、大きすぎて処理できない時間を指定しました。

関連項目
gettimeofday(2), select(2), sigvec(2), clocks(7)

歴史
getitimer() システムコールは 4.2BSD で登場しました。