定期的な実行
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 に、途中で時間を表示するコードを足してみよう。