#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;
}
Linux消息队列(简单的信号通知)
最新推荐文章于 2024-08-19 08:35:02 发布
