on_exit()函数使用说明

本文详细描述了Linux手册页中on_exit()函数的使用方法,包括其用途、语法、描述、返回值及遵循的标准。
摘要:本文描述的是Linux手册页中on_exit()函数的使用说明,使用on_exit()函数注册终止处理程序.原文来自:http://www.kernel.org/doc/man-pages/.
NAME
    on_exit - 用来注册执行exit()函数前执行的终止处理程序.
SYNOPSIS
    #include <stdlib.h>
    int on_exit(void (*function)(int , void *), void *arg);
  Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
    on_exit(): _BSD_SOURCE || _SVID_SOURCE
DESCRIPTION
   on_exit()用来注册终止处理程序,当程序通过调用exit()或从main 中返回时被调用, 终止处理程序有两个参数,第一个参数是来自最后一个exit()函数调用中的status,第二个参数是来自on_exit()函数中的arg.
    同一个函数若注册多次,那它也会被调用多次.
    当一个子进程是通过调用fork()函数产生时,它将继承父进程的所有终止处理程序.在成功调用exec系列函数后,所有的终止处理程序都会被删除.
RETURN VALUE
    成功返回0,失败返回非0值.
CONFORMING TO
       This function comes from SunOS 4, but is also present in glibc.  It no longer  occurs  in  Solaris (SunOS  5).   Portable  application  should  avoid  this  function, and use the standard atexit(3) instead.
END

笔者:个人能力有限,只是学习参考...读者若发现文中错误,敬请提出.

-- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------勿在浮沙筑高台,静下心来,慢慢地沉淀---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


在上一关我们学习使用vfork函数创建新进程,并且使用exit来结束子进程,本关我们将介绍Linux系统中结束进程的其它方法。 本关任务:学习终止进程的常见方法。 相关知识 在上一关以及看到,开发人员使用vfork创建出来的子进程可以用exit函数来结束。在 Linux 环境中,一个进程的结束,可以通过调用相应的函数实现,也可以是接收到某个信号而结束。 常见与退出进程相关的函数有:exit、_exitatexiton_exit、abort和assert。 exit函数是标准C库中提供的函数,它用来终止正在运行的程序,并且关闭所有I/O标准流。 _exit函数也可用于结束一个进程,与exit函数不同的是,_exit不会关闭所有I/O标准流。 atexit 函数用于注册一个不带参数也没有返回值的函数以供程序正常退出时被调用。 on_exit 函数的作用与atxeit函数十分类似,不同的是它注册的函数具有参数,退出状态和参数arg都是传递给该程序使用的。 abort 函数其实是用来发送一个SIGABRT信号,这个信号将使当前进程终止。 assert是一个宏。调用assert时,它将先计算参数表达式 expression的值,如果为0,则调用abort函数结束进程。 [exit和_exit区别] 以上关于退出处理函数中只有_exit是系统调用函数,因此使用man 2 _exit来查看其使用方法,而其余函数都是库函数,因此使用man 3 函数名来查看其使用方法。 exit和_exit使用方法 exit函数的具体的说明如下: 需要的头文件如下: #include <stdlib.h> 函数族格式如下: void exit(int status); 参数说明: status:设置程序退出码; _exit函数的具体的说明如下: 需要的头文件如下: #include <unistd.h> 函数族格式如下: void _exit(int status); 参数说明: status:设置程序退出码; 函数返回值说明exit和_exit均无返回值。 atexiton_exit使用方法 atexiton_exit函数的具体的说明如下: 需要的头文件如下: #include <stdlib.h> 函数族格式如下: int atexit(void (*function)(void)); int on_exit(void (*function)(int , void *), void *arg); 参数说明atexit函数的function参数是一个函数指针,指向无返回值和无参数的函数on_exit函数的function参数是一个函数指针,指向无返回值和有两个参数的函数,其中第一个参数是调用exit()或从main中返回时的值,参数arg指针会传给参数function函数函数返回值说明atexiton_exit调用成功返回0;调用失败返回一个非零值。 注意:atexiton_exit只有在程序使用exit或者main中正常退出时才会有效。如果程序使用_exit、abort或assert退出程序时,则不会执行被注册的函数。 案例演示1: 使用atexit注册一个退出函数,使其在调用退出函数前被执行,详细代码如下所示: #include <stdlib.h> #include <stdio.h> void out() { printf("程序正在被退出\n"); } int main() { if(atexit(out) != 0) { printf("调用atexit函数错误\n"); } return 0; //或者exit(0) } 将以上代码保存为atexit.c文件,编译执行。可以看到执行atexit程序后,out函数被调用。 案例演示2: 使用on_exit注册一个退出函数,使其在调用退出函数前被执行,详细代码如下所示: #include <stdlib.h> #include <stdio.h> void out(int status, void *arg) { printf("%s(%d)\n", (char *s)arg, status); } int main() { if(on_exit(out, "程序正在被退出") != 0) { printf("调用on_exit函数错误\n"); } exit(1); //或者return 1 } 将以上代码保存为on_exit.c文件,编译执行。可以看到执行on_exit程序后,
最新发布
10-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值