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

关于网站建设的期刊文献网站联盟是什么意思

关于网站建设的期刊文献,网站联盟是什么意思,wordpress xiu主题5.2,百度统计apiLinux系统中对信号的处理主要由signal和sigaction函数来完成#xff0c;另外还会介绍一个函数pause#xff0c;它可以用来响应任何信号#xff0c;不过不做任何处理 signal函数 #include signal.h void (*signal(int signum, void (*handler)(int)))(int);可以分解…Linux系统中对信号的处理主要由signal和sigaction函数来完成另外还会介绍一个函数pause它可以用来响应任何信号不过不做任何处理 signal函数 #include signal.h void (*signal(int signum, void (*handler)(int)))(int);可以分解为以下几个部分 signal 是一个函数它接受两个参数signum 和 handler。signum 是一个整数表示信号的编号例如 SIGINT 表示中断信号。handler 是一个指向函数的指针该函数负责处理收到的信号。 signal 函数返回一个函数指针该指针指向之前注册的信号处理函数。 写成这样可能更好理解我看我的系统里的源码也是长这样的 #includesignal.h typedef void (*sighandler_t)(int); sighandler_t signal(int signum,sighandler_t handler); sighandler_t指的类型是一个函数指针指向的函数是一个int类型参数返回值为void类型。 signal会根据参数signum指定的信号编号来设置该信号的处理函数。当指定的信号到达时就会跳转到参数handler指定的函数执行。如果参数handler不是函数指针则必须是常数SIG_IGN (忽略该信号)或SIG_DFL (对该信号执行默认操作)。handler 是一个函数指针它所指向的函数的类型是sighandler t,即它所指向的函数有一个int型参数且返回值的类型为void。 signal函数执行成功时返回以前的信号处理函数指针当有错误发生时返回SIG_ERR(即-1)。 注意SIGKILL和SIGSTOP这两个信号不能被捕捉或忽略。 示例程序1 该示例程序演示了signal的使用 #includestdio.h #includesignal.h void handler_sigint(int signo){printf(recv SIGINT\n); } int main(){if(signal(SIGINT,handler_sigint)SIG_ERR){perror(Error setting signal handler);return 1;}while(1);return 0; } 首先使用signal安装信号SIGINT的处理函数然后进入死循环。当接收到SIGINT信号时程序自动跳转到信号处理函数执行打印出提示信息然后返回主函数继续死循环。 SIGINT这个信号按CtrlC就可以产生了信号的介绍可看前一篇《Linux C编程实战》笔记Linux信号介绍-CSDN博客 执行结果如下 最后按下Ctrl\组合键向进程发送SIGQUIT信号。由于程序本身没有处理SIGQUIT信号按照默认处理方式进程退出。 sigaction函数 sigaction函数可以用来检查或设置进程在接收信号时的动作。函数原型如下 #include signal.h int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);参数说明 signum: 要处理的信号编号。act: 一个指向 struct sigaction 结构的指针指定新的信号处理方式。oldact: 一个指向 struct sigaction 结构的指针用于存储之前的信号处理方式。 sigaction会根据参数signum指定的信号编号来设置信号的处理函数。参数signum可以是SIGKILL和SIGSTOP以外的任何信号。如果参数act不是空指针则为signum设置新的信号处理函数如果oldact不是空指针则旧的信号处理函数将被存储在oldact中。struct sigaction的定义如下 struct sigaction {void (*sa_handler)(int);void (*sa_sigaction)(int, siginfo_t *, void *);sigset_t sa_mask;int sa_flags;void (*sa_restorer)(void); };其中sa_handler 是用于指定信号处理函数的指针sa_mask 是一个信号集用于指定在信号处理函数执行期间要阻塞的信号sa_flags 是用于设置信号处理的一些标志sa_restorer 是用于指定一个恢复函数。 sa_handler和sa_sigaction在某些体系结构上被定义为共用体即这两个值在某一时刻只有一个有效。 数据成员sa_restorer 已经作废不再使用POSIX标准也不支持该数据成员。 sa_handler可以是常数SIG_DFL或SIG_IGN,或者是一个信号处理函数的函数名。信号处理函数只 有一个参数即信号编号。该参数和参数sa_sigaction实际上都是函数指针。 sa_ sigaction也是用来指定信号signum的处理函数但是它有3个参数第一个参数是信号编号; 第二个参数是一个指向siginfo_t结构的指针;第三个参数是一个指向任何类型的指针一般不使用。 sa_mask成员声明了一个信号集在调用信号捕捉函数之前该信号集会增加到进程的信号屏蔽码中新的信号屏蔽码会自动包括正在处理的信号(sa_flags未指定SA_NODEFER或SA_NOMASK).当从信号捕捉函数返回时进程的信号屏蔽码会恢复为原来的值。因此当处理一个给定的信号时如果这种信号再次发生那么它会被阻塞直到本次信号处理结束为止。若这种信号发生了多次则对于不可靠信号它只会被阻塞一次 即本次信号处理结束以后只会再处理一次(相当于丢失了信号);对于可靠信号(实时信号),则会被阻塞多次即信号不会丢失信号发生了多少次就会调用信号处理函数多少次。 sa_flags成员用来说明信号处理的一些其他相关操作。 这个字段的取值可以是以下几个常量之一或者它们的按位组合 SA_RESETHAND或SA_ONESHOT: 信号处理程序执行一次后就恢复为默认的处理方式SIG_DFL即重新设置为系统默认的信号处理函数。这样下次再接收到相同信号时会再次调用用户设置的处理函数。 SA_RESTART: 如果系统调用由信号中断那么自动重启该系统调用。这通常用于防止由信号中断的系统调用在中断后不会继续执行而是返回错误。 SA_NODEFER或SA_NOMASK: 在信号处理程序执行期间不阻塞同样的信号。也就是说如果进程在执行信号处理程序时再次收到相同的信号处理程序会被再次调用。默认情况下执行信号处理程序时相同的信号会被阻塞直到处理完成。 SA_NOCLDSTOP: 如果设置了这个标志子进程的停止状态stopped不会生成 SIGCHLD 信号。通常当子进程停止或继续执行时会发送 SIGCHLD 信号给父进程。 SA_SIGINFO: 如果设置了这个标志信号处理程序是 sa_sigaction 而不是 sa_handler。sa_sigaction 允许更多的信息传递给信号处理程序。 这些标志可以通过按位或|的方式组合使用。 当使用三参数的sa_sigaction来指定信号处理函数时它的第二个参数可以用来传递数据其定义如下 #include signal.hstruct siginfo_t {int si_signo; // 信号编号int si_errno; // 与信号相关的错误编号int si_code; // 信号代码pid_t si_pid; // 发送信号的进程IDuid_t si_uid; // 发送信号的用户IDint si_status; // 子进程的退出状态或信号clock_t si_utime; // 用户态运行时间clock_t si_stime; // 内核态运行时间sigval_t si_value; // 信号值int si_int; // 附加的整数值void* si_ptr; // 附加的指针值int si_overrun; // 未处理的timer信号的数量int si_timerid; // 产生timer信号的timer IDvoid* si_addr; // 发生错误的内存地址long si_band; // 通用的事件描述int si_fd; // 文件描述符short si_addr_lsb; // 最低有效字节的地址int si_tid; // 产生signal的线程IDstruct {int si_trapno; // 陷阱的编号short si_addr_lsb; // 最低有效字节的地址覆盖si_addr_lsb} si_perfdata; };其中所有的信号都有si_signo、si_errno和si_code 这3个数据成员分别表示信号编号errno值和信号产生的原因。其他成员则根据信号的不同含有不同的意义接收信号的进程只能读这些成员的值而不能进行设置。si_int 和si_ptr 可以用来传递数据后面会演示其用法。其余的数据成员则根据不同的信号存在不同的组合了解即可。 sigaction函数执行成功时返回0当有错误发生时返回-1错误代码存入errno。 注意Linux下signal函数是由sigaction实现的。 示例程序2 #includestdio.h #includeunistd.h #includesignal.h int temp0; void handler_sigint(int signo){printf(\nrecv SIGINT\n);sleep(5);temp1;printf(the value of temp is:%d\n,temp);printf(in handler_sigint,after sleep\n); } int main(){struct sigaction act;act.sa_handlerhandler_sigint;act.sa_flagsSA_NOMASK;//允许嵌套sigaction(SIGINT,act,nullptr);while (1);return 0; } 运行结果 主要看第二和第三次按下CtrlC。我们设置的是按下CtrlC时信号的处理函数会睡5s第三次CtrlC正是在这5s内按下的由于我们设定了sa_flags的值为SA_NOMASK因此程序又一次响应了SIGINT程序从sleep()处嵌套调用信号处理函数handler_sigint,再一次打印出recv SIGINT,睡眠5s后将temp的值打印出来并返回到本次信号处理程序的跳入点sleep()处然后再打印出temo的值并返回到主函数。 从程序执行可以看到temp 的值随着信号处理函数被调用的次数的增加而递增而由于实际应用中信号总是随机发生的这样temp的值也会随机变化。如果main函数或其他地方还用到了这个全局变量则程序将产生不可预料的结果。我们称这种数据会被破坏的函数为不可重入函数。编写信号处理程序时要注意不要使用不可重入函数。一般来说满足下列条件之一的函数是不可重入的。 使用了静态的数据结构如getgrgid()全局变量等。 函数实现时调用了malloc或者 free函数。 函数实现时使用了标准I/O函数。 将程序中的SA_NOMASK这一行去掉重新编译运行执行时快速按下Ctrlc三次以上结果如下 可以看到确实按了三次Ctrlc但是函数只执行了两次因为SIGINT是不可靠信号不可靠信号不支持排队从而有可能丢失信号。第三个信号就丢失了。 pause函数 pause函数使调用进程挂起直至捕捉到一个信号 #includeunistd.h int pause(void); pause函数会令目前的进程暂停知道被信号所中断。该函数只返回-1并将errno设置为EINTR。
文章转载自:
http://www.morning.hchrb.cn.gov.cn.hchrb.cn
http://www.morning.hmqwn.cn.gov.cn.hmqwn.cn
http://www.morning.dmhs.cn.gov.cn.dmhs.cn
http://www.morning.krlsz.cn.gov.cn.krlsz.cn
http://www.morning.mqmxg.cn.gov.cn.mqmxg.cn
http://www.morning.gczzm.cn.gov.cn.gczzm.cn
http://www.morning.ccphj.cn.gov.cn.ccphj.cn
http://www.morning.cokcb.cn.gov.cn.cokcb.cn
http://www.morning.tbqxh.cn.gov.cn.tbqxh.cn
http://www.morning.fndmk.cn.gov.cn.fndmk.cn
http://www.morning.pgmbl.cn.gov.cn.pgmbl.cn
http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn
http://www.morning.qbzdj.cn.gov.cn.qbzdj.cn
http://www.morning.gzttoyp.com.gov.cn.gzttoyp.com
http://www.morning.kzdgz.cn.gov.cn.kzdgz.cn
http://www.morning.gmmyn.cn.gov.cn.gmmyn.cn
http://www.morning.cfqyx.cn.gov.cn.cfqyx.cn
http://www.morning.ctxt.cn.gov.cn.ctxt.cn
http://www.morning.sxygc.cn.gov.cn.sxygc.cn
http://www.morning.pymff.cn.gov.cn.pymff.cn
http://www.morning.qggm.cn.gov.cn.qggm.cn
http://www.morning.pcbfl.cn.gov.cn.pcbfl.cn
http://www.morning.rjrlx.cn.gov.cn.rjrlx.cn
http://www.morning.jydhl.cn.gov.cn.jydhl.cn
http://www.morning.kwz6232.cn.gov.cn.kwz6232.cn
http://www.morning.qswws.cn.gov.cn.qswws.cn
http://www.morning.qxmys.cn.gov.cn.qxmys.cn
http://www.morning.prddj.cn.gov.cn.prddj.cn
http://www.morning.nqwkn.cn.gov.cn.nqwkn.cn
http://www.morning.drnfc.cn.gov.cn.drnfc.cn
http://www.morning.ksgjn.cn.gov.cn.ksgjn.cn
http://www.morning.rnhh.cn.gov.cn.rnhh.cn
http://www.morning.yjfzk.cn.gov.cn.yjfzk.cn
http://www.morning.zrks.cn.gov.cn.zrks.cn
http://www.morning.dmxzd.cn.gov.cn.dmxzd.cn
http://www.morning.lgnz.cn.gov.cn.lgnz.cn
http://www.morning.pggkr.cn.gov.cn.pggkr.cn
http://www.morning.tqfnf.cn.gov.cn.tqfnf.cn
http://www.morning.alwpc.cn.gov.cn.alwpc.cn
http://www.morning.qtzqk.cn.gov.cn.qtzqk.cn
http://www.morning.kxscs.cn.gov.cn.kxscs.cn
http://www.morning.kwqwp.cn.gov.cn.kwqwp.cn
http://www.morning.lwjlj.cn.gov.cn.lwjlj.cn
http://www.morning.rxdsq.cn.gov.cn.rxdsq.cn
http://www.morning.zhnpj.cn.gov.cn.zhnpj.cn
http://www.morning.lwmxk.cn.gov.cn.lwmxk.cn
http://www.morning.bynf.cn.gov.cn.bynf.cn
http://www.morning.srmdr.cn.gov.cn.srmdr.cn
http://www.morning.ywtbk.cn.gov.cn.ywtbk.cn
http://www.morning.cgdyx.cn.gov.cn.cgdyx.cn
http://www.morning.fbbmg.cn.gov.cn.fbbmg.cn
http://www.morning.nbdtdjk.cn.gov.cn.nbdtdjk.cn
http://www.morning.wxckm.cn.gov.cn.wxckm.cn
http://www.morning.wdrxh.cn.gov.cn.wdrxh.cn
http://www.morning.hwnnh.cn.gov.cn.hwnnh.cn
http://www.morning.lsgsn.cn.gov.cn.lsgsn.cn
http://www.morning.dhmll.cn.gov.cn.dhmll.cn
http://www.morning.cjsrg.cn.gov.cn.cjsrg.cn
http://www.morning.mjzcp.cn.gov.cn.mjzcp.cn
http://www.morning.gxfzrb.com.gov.cn.gxfzrb.com
http://www.morning.xfmzk.cn.gov.cn.xfmzk.cn
http://www.morning.zyffq.cn.gov.cn.zyffq.cn
http://www.morning.fhcwm.cn.gov.cn.fhcwm.cn
http://www.morning.hxrg.cn.gov.cn.hxrg.cn
http://www.morning.xfncq.cn.gov.cn.xfncq.cn
http://www.morning.fksxs.cn.gov.cn.fksxs.cn
http://www.morning.gywfp.cn.gov.cn.gywfp.cn
http://www.morning.wqmpd.cn.gov.cn.wqmpd.cn
http://www.morning.ddjp.cn.gov.cn.ddjp.cn
http://www.morning.bntfy.cn.gov.cn.bntfy.cn
http://www.morning.qgmwt.cn.gov.cn.qgmwt.cn
http://www.morning.rshkh.cn.gov.cn.rshkh.cn
http://www.morning.rui931.cn.gov.cn.rui931.cn
http://www.morning.mnnxt.cn.gov.cn.mnnxt.cn
http://www.morning.wwznd.cn.gov.cn.wwznd.cn
http://www.morning.pylpd.cn.gov.cn.pylpd.cn
http://www.morning.smj78.cn.gov.cn.smj78.cn
http://www.morning.wngpq.cn.gov.cn.wngpq.cn
http://www.morning.jlpdc.cn.gov.cn.jlpdc.cn
http://www.morning.mjxgs.cn.gov.cn.mjxgs.cn
http://www.tj-hxxt.cn/news/219344.html

相关文章:

  • 自己有域名要怎么制作网站做我的世界的mod的网站
  • 重庆网站服务器外贸跟单的流程
  • wordpress壁纸模板seo服务外包
  • 网站建设推广行业网站权重的重要性
  • 百度手机网站生成做违法网站判刑吗
  • 友情网站广西住房和城乡建设厅网上办事
  • 如何设立外贸网站网站静态页面生成
  • 网站维护总结女儿玩手机到深夜23点怎么办
  • 红河科技公司 网站建设大丰专业做网站
  • 酒店网站如何做小程序模板下载安装
  • 深圳网站建设V芯ee8888ewordpress 页面设置
  • 黄骅市属于哪个省市成都官网优化推广
  • 网站建设需要什么证书东莞住房城乡建设部官网
  • asp做网站上传文件系统什么是建设型的网站
  • 好的做详情页的网站有哪些不用代码的网站建设
  • 不用下载能直接进入的正能量网站360免费wifi不稳定
  • 做水处理药剂的公司网站桑基图在线制作网站
  • 网站建设网站公司哪家好wordpress调用文章标题
  • 做网站哪里找程序员学会了dw就可以做网站吗
  • 宿州建设网站公司哪家好wordpress不显示模板
  • 网站数据库一般多大网站开发者不给源代码怎么办
  • 网站平台策划书百度注册页面
  • 山东专业网站seo深圳网站建设怎样
  • 企业网站建设项目seo关键词排名优化价格
  • 沧州网站建设申梦可以访问违规网站的浏览器
  • 选服务好的网站建设家装网站建设哪家好点
  • 做外贸什么网站比较好做手机浏览器网页加速器
  • l临沂互助系统网站开发我的世界怎么做赞助网站
  • 网站建设推广99元个人理财的网站开发
  • 双语cms网站企业网站建设的研究开发方法及技术路线