登录 注册
当前位置:主页 > 资源下载 > 49 > 直接转换abort函数从数据流图到模块结构图的方法

直接转换abort函数从数据流图到模块结构图的方法

  • 更新:2024-11-05 15:11:20
  • 大小:5.82MB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:Unix - 操作系统
  • 格式:PDF

资源介绍

10.17 abort函数 前面已提及a b o r t函数的功能是使程序异常终止。 #include void abort(void); 此函数不返回 此函数将S I G A B RT信号发送给调用进程。进程不应忽略此信号。 ANSI C要求若捕捉到此信号而且相应信号处理程序返回, a b o r t仍不会返回到其调用者。 如果捕捉到此信号,则信号处理程序不能返回的唯一方法是它调用 e x i t、_ e x i t、l o n g j m p或 s i g l o n g j m p。( 1 0 . 1 5节讨论了 l o n g j m p和s i g l o n g j m p之间的区别。)P O S I X . 1也说明a b o r t覆盖了进 程对此信号的阻塞和忽略。 让进程捕捉S I G A B RT的意图是:在进程终止之前由其执行所需的清除操作。如果进程并 不在信号处理程序中终止自己,P O S I X . 1说明当信号处理程序返回时,a b o r t终止该进程。 ANSI C对此函数的规格说明将这一问题留由实现决定,而不管输出流是否刷新以及不管 临时文件(见5 . 1 3节)是否删除。P O S I X . 1的要求则进了一步,它要求如果 a b o r t调用终止进程, 则它应该有对所有打开的标准 I / O流调用f c l o s e的效果。但是如果a b o r t调用并不终止进程,则它 对打开流也不应有影响。正如我们将在后面所看到的,这种要求很难实现。 系统V早期的版本中,a b o r t函数产生S I G I O T信号。更进一步,进程忽略此信 号,或者捕捉它并从信号处理程序返回都是可能的,在返回情况下, a b o r t返回到 它的调用者。 4 . 3 B S D产生S I G I L L信号。在此之前,该函数解除对此信号的阻塞,将其配置 恢复为SIG_DFL (终止并构造c o r e文件)。这阻止一个进程忽略或捕捉此信号。 S V R 4在产生此信号之前关闭所有 I / O流。在另一方面, 4 . 3 + B S D则不做此操 作。对于保护性的程序设计,如果希望刷新标准 I / O流,则在调用a b o r t之前要做这 种操作。在e r r _ d u m p函数中实现了这一点(见附录B)。 因为大多数UNIX tmpfile(临时文件)的实现在创建该文件之后立即调用u n l i n k, 所以ANSI C关于临时文件的警告通常与我们无关。 实例 程序1 0 - 1 8按P O S I X . 1的说明实现了a b o r t函数。对处理打开的标准 I / O流的要求是难于实现 的。首先查看是否执行了默认动作,并刷新了所有标准 I / O流。这并不等价于对所有打开的流 调用f c l o s e(因为只刷新,并不关闭它们),但是当进程终止时,系统会关闭所有打开文件。如 果进程捕捉此信号并返回,则刷新所有的流。(如果进程捕捉此信号,并且不返回,则不会触 及标准 I / O流。)没有处理的唯一条件是如果进程捕捉此信号,然后调用 _ e x i t。在这种情况下, 任何未刷新的存储器中的标准 I / O缓存都被丢弃。我们假定捕捉此信号,并特地调用 _ e x i t的调 用者并不想要刷新缓存。 回忆1 0 . 9节,如果调用 k i l l使其为调用者产生信号,并且如果该信号是不被阻塞的(程序 1 0 - 1 8保证做到了这一点),则在k i l l返回前该信号就被传送给了该进程。这样就可确知如果对 2 3 4 U N I X环境高级编程