第八章异常处理.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文档。上传文档
查看更多

第1页,共12页,星期日,2025年,2月5日8.1函数调用的错误处理(1)出错信息函数errno.h#includestdio.hchar*strerror(errnum);/*将errnum值,即errno值映射为一个出错信息字符串*/注:该函数本身并不实际打印,需调用一输出函数,如:coutstrerror(errno);#includestdio.hvoidperror(char*string);/*基于errno当前值在标准错误上产生出错消息,*/第2页,共12页,星期日,2025年,2月5日8.1函数调用的错误处理(2)显示错误信息的实例#includeerror.h#includestdio.hmain(){inti;for(i=0;i150;i++){errno=i;perror(“Erroris”);}}运行该程序将显示相应错误信息,结果为:Erroris:notownerErroris:Nosuchfileordirectory…第3页,共12页,星期日,2025年,2月5日8.1函数调用的错误处理(3)实例:errtest.cpp#includestdio.h#includestring.h#includeerrno.hmain(intargc,char*argv[]){cout”EACCES:%s\n”,strerror(EACCES);/*errno=EACCES时,产生了权限问题,13号错误*/errno=ENOENT;/*errno=ENOENT时,文件或目录不存在,2号错误*/perror(argv[0]);exit(0);}%g++errtest.cpp–oerrtest%./errtestEACCES:Permissiondenied./errtest:Nosuchfileordirectory第4页,共12页,星期日,2025年,2月5日8.1函数调用的错误处理(4)定义出错处理函数编程时应考虑各种可能出现的错误情形,分别加以处理,增加程序的健壮性通常定义一个新的函数,既包含相应的功能调用,又包含错误的处理,提高程序可读性,便于修改和调度,例:intmyaccept(intlistenfd,structsockaddr*client,int*sin_size){intconnectfd;while((connectfd=accept(listenfd,client,sin_size))==-1){if(errno==EINTR)continue;//产生了中断调用perror(“accept()error\n”);//其它错误break;}returnconnectfd;}第5页,共12页,星期日,2025年,2月5日8.2I/O超时处理(1)由网络引起的异常,主要表现为I/O操作超时主要处理方法:使用alarm()函数该函数将根据设置的超时时间值产生信号,然后通过信号处理器处理超时(捕获信号后执行一个函数)。这种方法简单但不够灵活。使用select()函数select()函数有一个时间选项,当I/O操作超时后,该函数返回0,返回-1表明异常错误,0时处理读/写操作。第6页,共12页,星期日,2025年,2月5日8.2I/O超时处理(2)使用alarm()函数典型代码:staticintstimeout=0;staticvoidalarmhandler(intsig){stimeout=1;}main(){…signal(SIGALRM,alarmhandler);stimeout=0;alarm(5);if(connect(sockfd,(structsockaddr*)server,sizeof(server))==-1){if(stimeout)perror(“timeoutconnectingstreamsocket”);perror(“connectingfailed”);close(sockfd);exit(1);}stimeout=0;alarm(0);…第7页,共12页,星期日,2025年,2月5日8.2

文档评论(0)

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

你好,我好,大家好!

版权声明书
用户编号:7140162041000002

1亿VIP精品文档

相关文档