2012-03-09 59 views
0

我有更多的三個定時器運行從主要如下所示,我已經定義了一個主要部分的消息隊列。我的計時器到期時間在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.