아래 코드는 제가 주기적으로 signal을 발생시키는 코드에다가 Serial 통신을 구현하기 위해서 Serial의 read()함수르 사용했습니다.

그런데 이 read()함수를 사용하면 signal 이 동작하지 않더라구요?? 왜 ㅠㅠ; 이런 문제가 생기는 것인가요?

read()함수를 다른 곳에 써서 사용할 수는 있지만, 왜 그런지 좀...알고 싶어서요 ^^?

int main ()
{

/* Install timer_handler as the signal handler for SIGVTALRM. */
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &timer_handler;
sigaction (SIGVTALRM, &sa, NULL);
/* Configure the timer to expire after 250 msec... */
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = 250000;
/* ... and every 250 msec after that. */
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 250000;
/* Start a virtual timer. It counts down whenever this process is executing. */
setitimer (ITIMER_VIRTUAL, &timer, NULL);

/* Do busy work. */

while(!ending)
{

DataCount = read( sd, Buff, 255 );

//datacount는 입력 받은 문자 개수
if(DataCount < 0 )
{ printf( "Read Error\n" );
break;
}
if(DataCount != 0 )
{ Buff[DataCount] = 0;
printf( "Read Data [%s]\n", Buff );
write( sd, Buff, strlen( Buff ) );
}

}
tcsetattr( sd, TCSANOW, &oldtio ); //설정 값 복구
close( sd ); //장치 종료
return 0;
}

void timer_handler (int signum)
{
static int count = 0;
printf("timer expired %d timers\n", ++count);
}