プログラムテクニックメモ(2001/07/11) 
 

SIGALRMとは

signal の1つ。signal=シグナルには、プログラムが異常終了した(core)、プログラムを中断(kill)など、色々な動作をするものがある。SIGALRM とは、プログラム処理時間を制御する signal である。この signal が設定されると、設定された時間になると signal で設定された関数が実行される。

SIGALRM等の signal は、基本的には1回しか設定することができない。例えば、2度 SIGALRM を設定した場合は、2回目の SIGALRM が有効である。また signal には組み合わせがあり、他の signal を設定すると SIGALRM が無効になったり signal の順位で無効になる場合もあるので注意が必要である。

alramとは

SIGALRMは、alram関数と共に使用される。5秒後にsignal処理を実行したい場合は alram(5) と実行することにより可能である。また alram を設定したが途中で alram を中断したい場合は alram(0) と実行する。

使用例としては、 10秒間の間にある文字列を入力できなかった場合は、ゲームオーバーする等と使用できる。但し、SIGALRMは使用が便利な代わりに、他の部分でも使用されている場合が多く、注意が必要である。

サンプル

#include <signal.h>

main()
{
   int i;
   char buf[16];
   extern void timeout();

   signal(SIGALRM,timeout);

   alarm(5);
   printf("Input keyword : ");
   gets(buf);
   alarm(0);

   printf("end\n");
}

void
timeout(int sig)
{
   printf("\nSIGALRM timeout\n");
   signal(SIGALRM,timeout);
}

←topへ