2012-03-09 15 views
0

私はメインから以下のように3つ以上のタイマーを実行しています。メインセクションには1つのメッセージキューが定義されています。私のタイマーの有効期限は10(最大)です。 タイマーが切れると "msgrcv"は "Interrupted system call"のようなエラーを出しますか?中断されたシステムコール

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. 
関連する問題