定期的な実行
Menu決まった時間で実行するには、setitimer というのを使う。signal が来るので、sigpause で待とう。
void check(void)
{
/* this function does nothing. */
}
main() {
....
struct itimerval itv ;
int simt = 0, sent = 0, rect = 0 ;
itv.it_interval.tv_sec = 0 ;
itv.it_interval.tv_usec = TIMEDELTA * 1000 ;
itv.it_value.tv_sec = 0 ;
itv.it_value.tv_usec = TIMEDELTA * 1000 ;
signal(SIGALRM, (void (*)(int))check) ;
setitimer(ITIMER_REAL, &itv, NULL) ;
for (;;) {
sigpause(sigblock(0L)) ;
do someting....
}
}
または、select のtimeout を使っても良い。こちらの方が簡単だがmain loop を使用する必要がある。
setitimer はsignalが来るので、read/write が失敗する可能性がある。その場合の対処方を示せ。
どちらかの方法を使い、keyrecord に、途中で時間を表示するコードを足してみよう。