Linux消息队列(简单的信号通知)

本文介绍了一个使用C语言实现的消息队列通知机制示例。通过信号量(SIGUSR1)接收消息队列的通知,并展示如何设置信号处理函数以响应这些通知。程序首先打开一个只读的消息队列,然后配置信号量处理函数并在无限循环中等待消息到达。
#include <unistd.h>
#include <stdio.h>
#include <mqueue.h>
#include <stdlib.h>
#include <signal.h>

mqd_t   mqd;
void    *buff;
struct  mq_attr attr;
struct  sigevent    sigev;

static  void sig_user1(int);

int main(int argc, char** argv)
{
    if(argc != 2)
    {
        printf("usage: mqnotifysig1 <name>");
    }
    mqd = mq_open(argv[1], O_RDONLY);

    mq_getattr(mqd, &attr);

    buff = malloc(attr.mq_msgsize);

    signal(SIGUSR1, sig_user1);

    sigev.sigev_notify = SIGEV_SIGNAL;
    sigev.sigev_signo = SIGUSR1;

    mq_notify(mqd, &sigev);

    for(;;)
    {
        pause();
    }

    exit(0);
}

static void sig_user1(int signo)
{
    ssize_t n;
    mq_notify(mqd, &sigev);
    n = mq_receive(mqd, buff, attr.mq_msgsize, NULL);
    printf("SIGUSR1 received, read %ld bytes\n", (long) n);
    return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值