2012-03-09 4 views
0

다음과 같이 main에서 실행되는 타이머가 3 개 이상 있으며 기본 섹션에 하나의 메시지 대기열을 정의했습니다. 내 타이머의 만료 시간은 10 (최대)입니다. 타이머가 만료되는 이유 "msgrcv"는 "중단 된 시스템 호출"과 같은 오류를 제공합니까?중단 된 시스템 호출

timer_t timer1 = create_timer(TT_SIGUSR1); 
    install_sighandler(TT_SIGUSR1, signal_handler); 
    set_timer(timer1, TIME_INTERVAL_1); 
    - 
     - 
     - 

    flag = IPC_CREAT | 0666; 
    key = 1234; 

    msgqid = msgget(key,flag); 
    printf("msgqid = %d\n",msgqid); 

    while (1) 
    { 
      msgsz = msgrcv(msgqid, &sendMsg, sizeof(sendMsg), 0,0); 
      perror("prashant"); 

      sleep(1); 
    } 
    return 0; 

답변

2

타이머가 만료되면 신호를 보내도록 설정했기 때문일 수 있습니다. 특정 시스템 호출에서 차단되어있는 동안 신호를 받으면 errno = EINTR으로 시스템 호출이 실패합니다.

The msgrcv() function shall fail if: 

    [EINTR] 
    The msgrcv() function was interrupted by a signal.