我有超过三个从main运行的计时器,如下所示,我在主要部分定义了一个消息队列。我的计时器的到期时间为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;
答案 0 :(得分:2)
因为您可能设置了计时器,以便在它到期时向您发送信号。在某些系统调用中被阻塞时接收信号将使所述系统调用失败并显示errno = EINTR
。
The msgrcv() function shall fail if:
[EINTR]
The msgrcv() function was interrupted by a signal.