c - 中断的系统调用

标签 c linux timer msgrcv

我有超过三个定时器从 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;

最佳答案

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

The msgrcv() function shall fail if:

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

关于c - 中断的系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9632195/

相关文章:

c - 如何在 C 中模拟同一 UUT 中的函数

linux - sleep (0)?在代码中保持一致的时间?

c - "if (pid = fork() > 0)"- 为什么 fork() 返回 pid 1 (systemd)?

c# - C# 计时器是否在单独的线程上流逝?

c - C中指向字符串数组的指针

c - 奇数如何打印递增顺序?

c - C 中的位封装

python - 使用 BPF 过滤器时 python 脚本的 CPU 使用率

c# - Service broker 与正常监视器性能

android - 如何在 flutter 的后台运行时钟计时器?