Прерванный системный вызов - PullRequest
0 голосов
/ 09 марта 2012

У меня более трех таймеров, работающих от основного, как указано ниже, и я определил одну очередь сообщений в главном разделе. Время истечения моего таймера в 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;

1 Ответ

2 голосов
/ 09 марта 2012

Потому что вы, вероятно, настроили свой таймер для отправки вам сигнала, когда он истекает.При получении сигнала, заблокированного на определенных системных вызовах, произойдет сбой указанных системных вызовов с errno = EINTR.

The msgrcv() function shall fail if:

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