大佬教程收集整理的这篇文章主要介绍了在Linux上以相反顺序接收的实时信号,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
$cat realtime.c #include <signal.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> int received_signals[10]; int received_signals_value[10]; int received_signals_count = 0; void real_time_handler(int sig_number,siginfo_t * info,void * arg __attribute__ ((unused))) { received_signals[received_signals_count] = sig_number - SIGRTMIN; received_signals_value[received_signals_count] = info->si_value.sival_int; ++received_signals_count; } void send_real_time_signal(int sig_number,int value) { union sigval sig_value; printf("Sending signal SIRTMIN+%d,value %d\n",sig_number,value); sig_value.sival_int = value; if (sigqueue(getpid(),sig_number + SIGRTMIN,sig_value) < 0) { perror("sigqueue"); exit(EXIT_FAILURE); } } int main() { struct sigaction action; sigset_t set; int i; // Handler setup action.sa_sigaction = real_time_handler; sigemptyset(&action.sa_mask); action.sa_flags = SA_SIGINFO; if ((sigaction(SIGRTMIN + 1,& action,NULL) < 0) || (sigaction(SIGRTMIN + 2,NULL) < 0) || (sigaction(SIGRTMIN + 3,NULL) < 0)) { perror("sigaction"); exit(EXIT_FAILURE); } // Block all signals sigfillset(&set); sigprOCMask(SIG_BLOCK,&set,null); send_real_time_signal(1,0); send_real_time_signal(2,1); send_real_time_signal(3,2); send_real_time_signal(1,3); send_real_time_signal(2,4); send_real_time_signal(3,5); send_real_time_signal(3,6); send_real_time_signal(2,7); send_real_time_signal(1,8); send_real_time_signal(3,9); // Unblock all signals sigfillset(&set); sigprOCMask(SIG_UNBLOCK,null); // To make sure we're handling all signals before resuming sleep(1); // Display results for (i = 0; i < received_signals_count; ++i) { printf("Received signal SIGRTMIN+%d,received_signals[i],received_signals_value[i]); } return EXIT_succesS; }
我一直得到以下输出:
$gcc -Wall -Wextra -O2 -o realtime realtime.c $./realtime Sending signal SIRTMIN+1,value 0 Sending signal SIRTMIN+2,value 1 Sending signal SIRTMIN+3,value 2 Sending signal SIRTMIN+1,value 3 Sending signal SIRTMIN+2,value 4 Sending signal SIRTMIN+3,value 5 Sending signal SIRTMIN+3,value 6 Sending signal SIRTMIN+2,value 7 Sending signal SIRTMIN+1,value 8 Sending signal SIRTMIN+3,value 9 Received signal SIGRTMIN+3,value 2 Received signal SIGRTMIN+3,value 5 Received signal SIGRTMIN+3,value 6 Received signal SIGRTMIN+3,value 9 Received signal SIGRTMIN+2,value 1 Received signal SIGRTMIN+2,value 4 Received signal SIGRTMIN+2,value 7 Received signal SIGRTMIN+1,value 0 Received signal SIGRTMIN+1,value 3 Received signal SIGRTMIN+1,value 8
这与signal(7)(http://man7.org/linux/man-pages/man7/signal.7.html)中的内容相矛盾:
据我了解,我应该得到:
$./realtime Sending signal SIRTMIN+1,value 9 Received signal SIGRTMIN+1,value 8 Received signal SIGRTMIN+2,value 7 Received signal SIGRTMIN+3,value 9
我已经快速浏览了一下Linux内核源代码,但却找不到处理实时信号的地方.
我做错了什么/遗失了什么或者手册页是不准确的?
以上是大佬教程为你收集整理的在Linux上以相反顺序接收的实时信号全部内容,希望文章能够帮你解决在Linux上以相反顺序接收的实时信号所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。