【问题标题】:Interrupted system call中断的系统调用
【发布时间】:2012-03-09 10:06:06
【问题描述】:

如下所示,我从 main 运行了三个以上的计时器,并且我在 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;

【问题讨论】:

    标签: c linux timer msgrcv


    【解决方案1】:

    因为您可能会设置计时器以在其到期时向您发送信号。在某些系统调用被阻塞时接收信号将使所述系统调用失败并显示errno = EINTR

    The msgrcv() function shall fail if:
    
        [EINTR]
        The msgrcv() function was interrupted by a signal.
    

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2015-01-09
      • 2015-07-14
      • 2011-08-06
      • 1970-01-01
      • 2022-11-24
      • 2016-01-30
      • 2016-02-01
      • 1970-01-01
      相关资源
      最近更新 更多