第七讲 为用户编程终端控制和.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

信号的来源信号来自内核生成信号的请求来自3个地方:用户--通过输入Ctrl-C、Ctrl-\等请求内核产生信号内核--进程执行出错时,内核向进程发送一个信号,例如非法段访问、浮点数溢出等,也可通知进程特定事件的发生。进程--通过系统调用kill给另一个进程发送信号。进程之间可通过信号通信第29页,共74页,星期日,2025年,2月5日同步与异步信号由进程的某个操作产生的信号称为同步信号,例如被零除用户击键这样的进程外的事件引起的信号称为异步信号第30页,共74页,星期日,2025年,2月5日信号列表信号编号及其名字可在/usr/include/signal.h文件中找到,例如SIGINT为中断信号,SIGQUIT退出信号,SIGSEGV非法段访问信号可以使用信号消灭一个进程,也有办法保护自己不被杀死第31页,共74页,星期日,2025年,2月5日进程处理信号的方法进程通过signal系统调用告诉内核如何处理信号进程有3个选择:(1)接受默认处理SIGINT默认处理为消亡,进程通过系统调用signal(SIGINT,SIG_DFL)恢复默认处理(2)忽略信号signal(SIGINT,SIG_IGN)系统调用告诉内核忽略该信号第32页,共74页,星期日,2025年,2月5日进程处理信号的方法(3)调用一个函数,这是3种方法中最强大的一个。例如在play_again3程序中,当用户输入Ctrl-C时,程序收到信号后执行一个恢复设置的函数就不会发生上述情况了程序能够告诉内核,当信号来时调用哪个函数,signal(SIGINT,function);信号到来时所调用的函数称为信号处理函数第33页,共74页,星期日,2025年,2月5日signal系统调用目标简单的信号处理头文件#includesignal.h函数原型result=signal(intsignum,void(*action)(int));参数signum需响应的信号action如何响应返回值-1遇到错误prevaction返回之前的处理函数指针第34页,共74页,星期日,2025年,2月5日signal系统调用其中action可以是函数名也可以是如下两种特殊值之一:SIG_IGN,忽略信号SIG_DFL将信号恢复为默认处理signal返回前一个处理函数。值为指向该函数的指针第35页,共74页,星期日,2025年,2月5日信号处理的例子sigdemo1.c

#include stdio.h#include signal.hmain(){ void f(int); /*declarethehandler */ int i; signal(SIGINT,f); /*installthehandler */ for(i=0;i5;i++){ /*dosomethingelse */ printf(hello\n); sleep(1); }}voidf(intsignum) /*thisfunctioniscalled*/{ printf(OUCH!\n);}第36页,共74页,星期日,2025年,2月5日信号处理过程main(){signal(SIGINT,f);for(i=0;i5;i++){printf(“hello\n”);sleep(1);}}正常控制流信号函数f(){printf(“OUCH”);}第37页,共74页,星期日,2025年,2月5日sigdemo1.c执行结果hellohellohellohello^COUCH!hello第38页,共74页,星期日,2025年,2月5日忽略信号sigdemo2.c

#include stdio.h#include signal.hmain(){ signal(SIGINT,SIG_IGN); printf(youcantstopme!\n); while(1) { sleep(1); printf(haha\n); }}第39页,共74页,星期日,2025年,2月5日sigdemo2.c程序执行结果youcantstopme!hahahaha^Chahahaha^Chahahaha^\退出第40页,共74页,星期日,2025年,2月5日sigdemo2.c调用signal忽略中断信号,可以随意按Ctrl-C而不会对程序产生影响signal(SIGIN

文档评论(0)

xiaolan118 + 关注
实名认证
文档贡献者

你好,我好,大家好!

版权声明书
用户编号:7140162041000002

1亿VIP精品文档

相关文档