기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

signal사용시 read()함수 사용하면 signal interrupt가 동작하지 않나요?

아래 코드는 제가 주기적으로 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);
 }


고도리

2012.02.16 07:02:37
*.200.239.234

blocking함수와 시간과의 관계는 주로 select 함수를 사용하는게 사용하기 편합니다.



List of Articles
번호 제목 글쓴이 날짜 조회 수

사용자 로그인