当前位置: 首页 > news >正文

网站限定域名网站开发的代码

网站限定域名,网站开发的代码,做美剧盗版网站,高端网站制作乐是概述 在前一篇文章中#xff0c;我们介绍了signal函数、sigaction函数等基本的信号处理方法。在本篇中#xff0c;我们将介绍信号处理的一些高级用法#xff0c;包括#xff1a;阻塞与解除阻塞、定时器等。 阻塞与解除阻塞 有时候#xff0c;我们不希望某个信号立即被处理…概述 在前一篇文章中我们介绍了signal函数、sigaction函数等基本的信号处理方法。在本篇中我们将介绍信号处理的一些高级用法包括阻塞与解除阻塞、定时器等。 阻塞与解除阻塞 有时候我们不希望某个信号立即被处理而是暂时将其阻塞起来。此时可以使用sigprocmask函数来修改当前进程的信号掩码从而达到阻塞或解除阻塞的效果这对于确保多线程环境中信号的安全处理非常重要。 sigprocmask函数的原型如下。 int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); 各个参数和返回值的含义如下。 how决定了如何修改信号掩码必须是以下三个宏之一。 1SIG_BLOCK新的信号集将被添加到当前的信号掩码中即这些信号将会被阻塞。 2SIG_UNBLOCK新的信号集中的信号将从当前的信号掩码中移除即这些信号将不再被阻塞。 3SIG_SETMASK当前的信号掩码将被新的信号集完全替换。 set指向sigset_t类型的指针这个集合包含了要修改的信号。如果为NULL则不会修改信号掩码但oldset将包含当前的信号掩码。 oldset如果不是NULL它指向的对象将被设置为函数调用之前的信号掩码。这可以用来保存当前的信号掩码以便之后恢复。 返回值成功时返回0失败时返回-1并设置errno以指示具体的错误原因。 sigset_t是C语言中的一个数据类型被用来表示信号集。下面这些常用函数可以允许我们初始化、修改和检查sigset_t类型的变量。 sigemptyset(sigset_t *set)初始化信号集为空即不包含任何信号。 sigfillset(sigset_t *set)初始化信号集为包含所有可能的信号。 sigaddset(sigset_t *set, int signum)向信号集中添加一个指定的信号。 sigdelset(sigset_t *set, int signum)从信号集中删除一个指定的信号。 sigismember(const sigset_t *set, int signum)检查指定的信号是否属于给定的信号集。若信号存在于集合中则返回1否则返回0。若出错则返回-1。 在下面的示例代码中我们先阻塞了SIGINT信号然后对SIGINT信号解除了阻塞。 #include signal.h #include stdio.hvoid BlockSignal(int signum) {sigset_t set;、// 初始化信号集为空sigemptyset(set);// 添加信号到集合sigaddset(set, signum);sigprocmask(SIG_BLOCK, set, NULL); }void UnblockSignal(int signum) {sigset_t set;sigemptyset(set);sigaddset(set, signum);sigprocmask(SIG_UNBLOCK, set, NULL); }int main() {int signum SIGINT;BlockSignal(signum);printf(Signal %d is now blocked\n, signum);// 其他代码...UnblockSignal(signum);printf(Signal %d is now unblocked\n, signum);return 0; } 定时器 SIGALRM是Linux系统中的一个信号用于通知进程定时器到期。当使用alarm函数或setitimer函数设置的定时器超时时系统便会向进程发送SIGALRM信号。 1、alarm函数。设置一个一次性的计时器在指定的秒数后会发送SIGALRM给进程。 unsigned int alarm(unsigned int seconds); 各个参数和返回值的含义如下。 seconds希望在多少秒后接收到SIGALRM信号的时间间隔。如果为零则不会安排新的SIGALRM信号并且任何之前设置的未决SIGALRM信号都会被取消。 返回值如果之前已经设置了定时器会返回剩余到前一个定时器触发的时间以秒为单位。如果没有之前的定时器它将返回0。 2、setitimer函数。提供更细粒度的控制可以设置间隔定时器指定不同的定时器类型并且可以配置为周期性触发。 int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value); 各个参数和返回值的含义如下。 which指定要设置的定时器类型可取的值如下。 1ITIMER_REAL发送SIGALRM信号时基于实际墙钟时间。 2ITIMER_VIRTUAL当进程执行时发送SIGVTALRM信号只计算用户模式下的CPU时间。 3ITIMER_PROF当进程执行或在系统调用中等待时发送SIGPROF信号用于性能分析既计算用户模式又计算内核模式下的CPU时间。 new_value指向itimerval结构体的指针定义了新的定时器值。这个结构体包含两个timeval结构体成员。 1it_value下次定时器到期前的时间量。当这个值达到零时定时器将被触发并根据it_interval重新加载。 2it_interval定时器到期后的重装值即每次触发后重新开始计时的时间间隔。如果为零则定时器仅触发一次。 old_value如果不是NULL则指向itimerval结构体用来保存之前的定时器设置。 返回值成功时返回0失败时返回-1并设置errno以指示具体的错误原因。 默认情况下接收到SIGALRM信号会导致进程终止。我们可以通过调用signal或sigaction函数来安装自定义的信号处理程序从而改变这种行为。 在下面的示例代码中我们首先设置了SIGALRM信号的处理器。然后使用alarm函数来设定一个6秒的定时器。当定时器到期时SIGALRM信号被发送给进程我们的自定义处理器将会被调用。之后程序将继续执行。 #include stdio.h #include stdlib.h #include unistd.h #include signal.hvoid OnHandleAlarm(int signum) {if (signum SIGALRM){printf(Alarm signal received\n);} }int main() {// 安装SIGALRM信号处理器if (signal(SIGALRM, OnHandleAlarm) SIG_ERR){printf(signal failed\n);exit(EXIT_FAILURE);}// 设置一个6秒的定时器alarm(6);printf(Waiting for the alarm...\n);// 暂停直到接收到信号pause();printf(Program continues after alarm\n);return 0; } 如果需要更高精度的时间间隔或希望定时器能够重复触发可以使用setitimer函数代替alarm函数。在接下来的示例代码中我们设置了SIGALRM信号处理器并通过setitimer函数配置了一个定时器。该定时器会在1秒后首次触发然后每隔1秒再次触发。每当定时器到期时OnHandleAlarm函数就会被执行。 #include stdio.h #include stdlib.h #include signal.h #include sys/time.hvoid OnHandleAlarm(int signum) {if (signum SIGALRM){printf(Timer expired\n);} }int main() {// 设置SIGALRM的处理函数signal(SIGALRM, OnHandleAlarm);// 配置定时器首次触发时间为1秒之后每隔1秒触发一次struct itimerval timer;// 第一次触发的时间timer.it_value.tv_sec 1;timer.it_value.tv_usec 0;// 每次触发后重新开始计时的时间间隔timer.it_interval.tv_sec 1;timer.it_interval.tv_usec 0;// 设置ITIMER_REAL定时器setitimer(ITIMER_REAL, timer, NULL);printf(Waiting for the timer...\n);// 让程序持续运行并响应定时器信号while(1){pause();}return 0; }
http://www.w-s-a.com/news/166001/

相关文章:

  • 网站评论怎么做seo关键词优化方法
  • 市级部门网站建设自评报告网站优化文章怎么做
  • 可不可以异地建设网站学做网站培训班要多少钱
  • 茌平网站建设公司免费的云服务器有哪些
  • 手机网站单页面铜陵网站制作公司
  • 网站logo怎么做才清晰千库网官网首页登录
  • 山西省建设银行网站首页长沙网站建设制作
  • 襄阳市做网站 优帮云百度搜索次数统计
  • 自己做视频直播网站盐城做网站多少钱
  • 买个网站服务器多少钱重庆做的好的房产网站
  • 深圳定制建站网站建设推广关键词怎么设置
  • 宝山网站建设 网站外包修改wordpress版权
  • 建立网站的基本步骤新网站多久会被百度收录
  • 软件设计开发流程图廊坊关键词seo排名方案
  • 南山住房和建设局网站网站被k 多久恢复
  • 阿里买域名 电脑做网站做简历哪个网站好
  • 个人网站免费服务器单页网站的域名
  • 网站设计简单讲解小店怎么做网站
  • 校园网站的意义wordpress去除更新
  • 网站开发用python吗常用的网页开发工具有哪些
  • 北京市住房建设投资建设网站做商城网站要哪些流程
  • seo网站改版杭州建设局官网
  • 物流网站建设策划书泰然建设网站
  • 百度做网站的费用采集发布wordpress
  • 网站运维公司有哪些防录屏网站怎么做
  • 昆明做网站seo的网站制作专业
  • 聊城制作手机网站公司wordpress 头条
  • 商城微网站模板一般电商网站做集群
  • winserver2008上用iis发布网站嵊州网站制作
  • 网站内页权重怎么查辽宁建设工程信息网怎么上传业绩