#参照リンクがなくなっていました。。。が、当時のまま載せます。
http://iislab.ele.kindai.ac.jp/ochi/education/lecture/experiment/c/signal.htm
上記 signal関数を用いれば、アラームクロックのシグナルを捕捉することができることがわかった。
では、そのアラームクロックは、どのように設定するのでしょうか?
これはタイマーで決定され、タイマーは次の関数で設定することができます。
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
which には、次のいずれかの種類のタイマーを設定します。
ITIMER_REAL 実時間(real time)で減少し、切れた場合には SIGALRM が配送される。
ITIMER_VIRTUAL プロセスが実行されている間のみ減少し、切れた場合は SIGVTALRM が配送される。
ITIMER_PROF プロセスが実行されている間とそのプロセスのためにシステムが実行されている間に減少する。
切れた場合には SIGPROF が配送される。
valueにはタイマーの値として以下の構造体によって定義される値を設定します。
struct itimerval { struct timeval it_interval; /* next value */ struct timeval it_value; /* current value */ };
タイマーは it_value からゼロへ向けて減っていき、it_interval に初期化されるます。
タイマーが切れた場合にはシグナルが送られ、タイマーは(潜在的に)再起動されることになります。
設定した時間が経った後に SIGALRM が発生しますから、それにより signal関数で設定した関数が呼び出されます。
コメント