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;
4

1 に答える 1

2

おそらく、タイマーが切れたときに信号を送信するようにタイマーを設定しているからです。特定のシステム コールでブロックされているときに信号を受信すると、そのシステム コールは で失敗しerrno = EINTRます。

The msgrcv() function shall fail if:

    [EINTR]
    The msgrcv() function was interrupted by a signal.
于 2012-03-09T10:08:29.800 に答える