Linux/UNIX网络编程 -甘刚 第12章信号量编程.pptVIP

Linux/UNIX网络编程 -甘刚 第12章信号量编程.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
# includesetjmp.h int sigsetjmp(sigjmp buf, int savemask); 返回:若直接调用则为0,若从siglongjmp调用返回则为非0。 void siglongjmp(sigjmp_buf, int val); 这两个函数和setjmp()、longjmp()之间的唯一区别是sigsetjmp()增加了一个参数。如果savemask非0,则sigsetjmp()在env中保存进程的当前信号屏蔽字。调用siglongjmp()时,如果带非0 savemask的sigsetjmp()调用已经保存了env,则siglongjmp()从其中恢复保存的信号屏蔽字。 sigsuspend函数 上面已经说明,更改进程的信号屏蔽字可以阻塞或解除阻塞所选择的信号。使用这种技术可以保护不希望由信号中断的代码临界区。如果希望对一个信号解除阻塞,然后 pause以等待以前被阻塞的信号发生,则又将如何呢?假定信号是SIGINT,实现这一点的一种不正确的方法是:如果在解除对SIGINT的阻塞和 pause之间产生了SIGINT信号,则此信号被丢失。这是早期的不可靠信号机制的另一个问题。为了纠正此问题,需要在一个原子操作中实现恢复信号屏蔽字,然后使进程睡眠,这种功能是由sigsuspend()函数提供的。 # includesignal.h int sigsuspend (const sigset t, *sigmask); 返回:-1,errno设置为EINTR。 进程的信号屏蔽字设置为由sigmask指向的值。在捕捉到一个信号或发生了一个会终止该进程的信号之前,该进程也被挂起;如果捕捉到一个信号而且从该信号处理程序返回,则sigsuspend返回,并且该进程的信号屏蔽字设置为调用 sigsuspend之前的值。 abort函数 前面已提及abort()函数的功能是使程序异常终止。 #includestdlib.h void abort (void); 此函数将SIGABRT信号发送给调用进程。进程不应忽略此信号。 ANSI C要求若捕捉到此信号而且相应信号处理程序返回,abort()仍不会返回到其调用者。如果捕捉到此信号,则信号处理程序不能返回的唯一方法是它调用exit()、_exit()、longjmp()或siglongjmp()。POSIX.1也说明abort覆盖了进程对此信号的阻塞和忽略。让进程捕捉 SIGABRT的意图是:在进程终止之前由其执行所需的清除操作。如果进程并不在信号处理程序中终止自己,POSIX.1说明当信号处理程序返回时,abort()终止该进程。 system函数 POSIX.2要求system()忽略SIGINT和SIGQUIT,阻塞SIGCHLD。 sleep函数 sleep函数的原型如下: # includeunistd.h unsigned int sleep(unsigned int); 返回:0或未睡的秒数。 此函数使调用进程被挂起直到: (1)已经过了seconds所指定的时间。 (2)该进程捕捉到一个信号并从信号处理程序返回。 第12章 信号量编程 知识点: 信号量的作用以及常见的信号量介绍 与信号量有关的常见函数使用方法 在线教务辅导网: 教材其余课件及动画素材请查阅在线教务辅导网 QQ:349134187 或者直接输入下面地址: 信号的概念 除了在正常方式下运行客户及服务器外,还要检查此例的许多边界条件:客户和服务器都启动时是什么情况;如果服务器主机崩溃则客户又会是什么情况等。通过观察这些情况,弄清网络层次发生的一些事情,以及它们是如何反映到套接口API的,将对这些层次的工作原理有更多的认识,并知道如何编写应用代码来处理这些情形。这些就是各种信号出现后应该解决的问题。 信号是发生某事件时对进程的通知,有时称为软中断。它一般是异步的,这就是说,进程不可能提前知道信号发生的时间。 每个信号都有一个处理办法(disposition),也称为与信号相关联的行为(action)。通过调用函数sigaction()来设置一个信号的处理办法,并有3个选择。 (1)可以提供一个情报函数,在信号发生时随即调用。这个函数称为信号处理程序(signal handler),而此行为则称为捕获(catching)信号。有两个信号不能被捕获,即SIGKILL和SIGSTOP。函数由信号值这个单一的整数参数来调用且无返回值,所以其函数原型为: void handler (int signo); 对于多数信号来说,调用函数sigaction()并指定信号发生时调用的函数是捕获信号所需的所有事情,但稍后将看到,有些信号(如SIGIO、

文档评论(0)

118压缩包课件库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档