タイムアウトについて、ソースの解説お願いしたいです
Posted: 2013年9月22日(日) 23:49
C言語のプログラミングについて
”プログラム開始から3秒以内に数字を入力したらその数字を出力、3秒経過したらタイムアウトする”というプログラムを友人につくってもらったのですが
いまいちプログラムの流れやひとつひとつどんな処理しているのかがわかりません
どなたかわかりやすく解説してくれるとうれしいです、以下ソース
include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<signal.h>
#include<time.h>
#include<sys/time.h>
int mygetchar(int timeout);
int main()
{
int c;
c = mygetchar(3); // maygetchar(秒数)
if(c)printf("入力された数字は %d\n",c);
return 0;
}
int mygetchar(int timeout)
{
int imput;
struct sigaction sa;
struct itimerval itimer;
void mywait(int no) { printf("\n\nタイムアウトしました\n\n\n"); }//タイムアウトしたときのメッセージ
// シグナルハンドラの設定
memset(&sa,0,sizeof(struct sigaction));
sa.sa_handler = mywait;
//sa.sa_flags = SA_RESTART;
if(sigaction(SIGALRM,&sa,NULL) != 0){
perror("sigaction");
return 0;
}
// タイマーの設定
itimer.it_value.tv_sec = itimer.it_interval.tv_sec = timeout; // sec
itimer.it_value.tv_usec = itimer.it_interval.tv_usec = 0; // micro sec
if(setitimer(ITIMER_REAL,&itimer,NULL) < 0) {
perror("setitimer");
return 0;
}
// 1文字入力
scanf("%d",&imput);//ここの処理が時間内に終わればタイムアウトせずに処理を続行
return imput;
}
”プログラム開始から3秒以内に数字を入力したらその数字を出力、3秒経過したらタイムアウトする”というプログラムを友人につくってもらったのですが
いまいちプログラムの流れやひとつひとつどんな処理しているのかがわかりません
どなたかわかりやすく解説してくれるとうれしいです、以下ソース
include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<signal.h>
#include<time.h>
#include<sys/time.h>
int mygetchar(int timeout);
int main()
{
int c;
c = mygetchar(3); // maygetchar(秒数)
if(c)printf("入力された数字は %d\n",c);
return 0;
}
int mygetchar(int timeout)
{
int imput;
struct sigaction sa;
struct itimerval itimer;
void mywait(int no) { printf("\n\nタイムアウトしました\n\n\n"); }//タイムアウトしたときのメッセージ
// シグナルハンドラの設定
memset(&sa,0,sizeof(struct sigaction));
sa.sa_handler = mywait;
//sa.sa_flags = SA_RESTART;
if(sigaction(SIGALRM,&sa,NULL) != 0){
perror("sigaction");
return 0;
}
// タイマーの設定
itimer.it_value.tv_sec = itimer.it_interval.tv_sec = timeout; // sec
itimer.it_value.tv_usec = itimer.it_interval.tv_usec = 0; // micro sec
if(setitimer(ITIMER_REAL,&itimer,NULL) < 0) {
perror("setitimer");
return 0;
}
// 1文字入力
scanf("%d",&imput);//ここの処理が時間内に終わればタイムアウトせずに処理を続行
return imput;
}