.\" Copyright (c) 1983, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)getitimer.2 8.3 (Berkeley) 5/16/95 .\" %FreeBSD: src/lib/libc/sys/getitimer.2,v 1.10.2.2 2000/12/29 14:44:52 ru Exp % .\" .\" $FreeBSD$ .Dd May 16, 1995 .Dt GETITIMER 2 .Os BSD 4.2 .Sh 名称 .Nm getitimer , .Nm setitimer .Nd インターバルタイマの値を取得 / 設定 .Sh ライブラリ .Lb libc .Sh 書式 .Fd #include .Fd "#define ITIMER_REAL 0" .Fd "#define ITIMER_VIRTUAL 1" .Fd "#define ITIMER_PROF 2" .Ft int .Fn getitimer "int which" "struct itimerval *value" .Ft int .Fn setitimer "int which" "const struct itimerval *value" "struct itimerval *ovalue" .Sh 解説 システムは、各プロセスに .Ao Pa sys/time.h Ac で定義された 3 つのインターバルタイマを提供しています。 .Fn getitimer システムコールは .Fa which で指定されたタイマの現在の値を .Fa value 構造体に返します。 .Fn setitimer システムコールはタイマを指定の .Fa value に設定します .Fa ( ovalue が nil でない場合、タイマの 以前の値が返されます)。 .Pp タイマの値は .Fa itimerval 構造体によって定義されます。 .Bd -literal -offset indent struct itimerval { struct timeval it_interval; /* タイマインターバル */ struct timeval it_value; /* 現在の値 */ }; .Ed .Pp .Fa it_value が 0 でない場合、それは次にタイマが時間切れになるまでの時間を示します。 .Fa it_interval が 0 でない場合、それはタイマが時間切れになるときに .Fa it_value を再設定するのに 使用される値を指定します。 .Fa it_value を 0 に設定すると、タイマは .Fa it_interval の値に関係なく無効になります。 .Fa it_interval を 0 に設定すると、次の時間切れの後でタイマは無効になります .Fa ( it_value が 0 でないと想定します)。 .Pp システムクロックの精度 (通常は 10 ミリ秒です) より小さい時間の値は この精度に切り上げられます。 .Pp .Dv ITIMER_REAL タイマはリアルタイムで減少していきます。このタイマが時間切れになると .Dv SIGALRM シグナルが配信されます。 .Pp .Dv ITIMER_VIRTUAL タイマはプロセス仮想時間で減少します。 このタイマが減るのはプロセスが実行中の ときだけです。時間切れになるときに .Dv SIGVTALRM シグナルが配信されます。 .Pp .Dv ITIMER_PROF タイマは、プロセス仮想時間内およびシステムがプロセスのために 処理を行っているときの両方で減少します。 これは、インタプリタがプログラムの実行を統計的にプロファイルするときに 使用するように設計されています。 .Dv ITIMER_PROF タイマが時間切れになるたびに .Dv SIGPROF シグナルが配信されます。 このシグナルは進行中のシステムコールに割り込むかもしれないので、 このタイマを使用しているプログラムは割り込まれたシステムコールを 再実行する準備をしておかなければなりません。 .Pp .Fn setitimer で .Fa it_interval と .Fa it_value に許容される最大秒数は 100000000 です。 .Sh 注 時間の値を操作する 3 つのマクロは .Ao Pa sys/time.h Ac で定義されています。 .Fa timerclear は時間の値を 0 に設定し、 .Fa timerisset は時間値が 0 でないかどうか検査し、 .Fa timercmp は 2 つの時間の値を比較します。 .Sh 戻り値 呼び出しが正常に完了すると値 0 が返されます。 エラーが起きた場合は値 -1 が返され、 より正確なエラーコードがグローバル変数 .Va errno に設定されます。 .Sh エラー .Fn getitimer と .Fn setitimer は次の場合に失敗します。 .Bl -tag -width Er .It Bq Er EFAULT .Fa value パラメータが無効なアドレスを指定しました。 .It Bq Er EINVAL .Fa value パラメータが、大きすぎて処理できない時間を指定しました。 .El .Sh 関連項目 .Xr gettimeofday 2 , .Xr select 2 , .Xr sigvec 2 , .Xr clocks 7 .Sh 歴史 .Fn getitimer 関数は .Bx 4.2 で登場しました。