精华内容
下载资源
问答
  • atexit函数

    2017-05-11 19:13:46
    一、什么是atexit函数? 1、头文件 stdlib.h 2、函数功能 登记进程中的函数 3、atexit函数的使用 代码如下: 改程序的运行结果如下: 由上图可知,程序每被登记一次就被调用一次并且调用这些函数的...

    一、什么是atexit函数?
    1、头文件
    stdlib.h
    2、函数功能
    登记进程中的函数
    3、atexit函数的使用
    代码如下:
    这里写图片描述
    这里写图片描述
    改程序的运行结果如下:
    这里写图片描述
    由上图可知,程序每被登记一次就被调用一次并且调用这些函数的顺序和它们登记时候的顺序相反。

    展开全文
  • atexit 函数

    2019-09-19 23:24:13
    按照 ISO C 的规定,一个进程可以登记多达 32 个函数,这些函数将由 exit ...我们称这些函数为终止处理函数 (exit handler),并调用 atexit 函数来登记这些函数。 #include <stdlib.h> int atexit(void (*fu...

    按照 ISO C 的规定,一个进程可以登记多达 32 个函数,这些函数将由 exit 自动调用。我们称这些函数为终止处理函数 (exit handler),并调用 atexit 函数来登记这些函数。

    #include <stdlib.h>
    
    int atexit(void (*func)(void));
    
    返回值:若成功则返回 0,或出错则返回非 0 值
    

    其中,atexit 的参数是一个函数地址,当调用此函数时无需向它传送任何函数,也不期望它返回一个值。exit 调用这些函数的顺序与它们登记时候的顺序相反。同一函数如若被登记多次,则也会被调用多次。

    atexit.c

    #include <stdlib.h>
    
    /* external declarations */
    extern void (*_Atfuns[])(void);
    extern size_t _Atcount;
    
    int (atexit)(void (*func)(void)) /* function to call at exit */
    {
        if (_Atcount == 0)
    	    return (-1);
    	_Atfuns[--_Atcount] = func; /* list is full */
    	return (0);
    }
    

    exit.c

    #include <stdio.h>
    #include <stdlib.h>
    
    /* macros */
    #define NATS 32
    /* static data */
    void (*_Atfuns[NATS])(void) = {0};
    size_t _Atcount = {NATS};
    
    void (exit)(int status)           /* tidy up and exit to system */
    {
    	while (_Atcount < NATS) {
    	    (*_Atfuns[_Atcount++])() ;
    	}
    
    	size_t ;
    		
    	for (i = 0; i < FOPEN_MAX; ++i)   /* close all files */
    	    if (_Files[i])
    		    fclose(_Files[i]);
    
    	_Exit (status);
    }
    

    参考资料

    [1] C 标准库.卢红星等译.人民邮电出版社
    [2] UNIX 环境高级编程第 2 版.尤晋元等译.人民邮电出版社

    转载于:https://my.oschina.net/iblackangel/blog/891063

    展开全文
  • 工作找完了,老板逼着写各种乱七八糟的本子,偷着写点自己的理解... 按照ISO C的规定,一个进程可以登记多达32个函数,这些函数将由exit自动调用,通常这32个函数被称为终止处理程序,并调用atexit函数来登记这些函数。
  • atexit函数详述

    2019-11-14 14:47:54
    atexit函数用来注册终止函数,简单说即当main函数执行结束后调用的函数,严格来说是进程执行完将要退出前,exit调用的一些收尾函数。 atexit注册的函数类型应为不接受任何参数的void函数,即atexit(void(*func)...

    atexit函数用来注册终止函数,简单说即当main函数执行结束后调用的函数,严格来说是进程执行完将要退出前,exit调用的一些收尾函数。

    1. atexit注册的函数类型应为不接受任何参数的void函数,即atexit(void(*func)(void))
    2. exit调用这些注册函数的顺序与它们注册的顺序相反,同一个函数可以登记多次,则也会被调用多次。
    3. 在头文件<stdlib.h>中。
    4. 进程的终止方式有8种,其中5种方式是正常终止,它们是:
      ① 从main返回
      ② 调用exit
      ③ 调用_exit或者_Exit
      ④ 最后一个线程从其启动例程返回
      ⑤ 最后一个线程调用pthread_exit
      异常终止有3种,它们是
      ⑥ 调用abort
      ⑦ 接到一个信号并终止
      ⑧ 最后一个线程对取消请求做出响应
    5. 例程如下:
    #include <stdio.h>
    #include <stdlib.h>
    void exit_fn1(void)
    {
    printf("Exit function #1 called\n");
    }
    void exit_fn2(void)
    {
    printf("Exit function #2 called\n");
    }
    int main(void)
    {
    /* post exit function #1 */
    atexit(exit_fn1);
    /* post exit function #2 */
    atexit(exit_fn2);
    return 0;
    }
    输出:
    Exit function #2 called
    Exit function #1 called
    
    展开全文
  • atexit函数用法

    2017-04-15 15:18:09
    atexit函数的用法 首先先看一个实例:  根据上方例图就会发现:atexit函数先注册四个fun函数,然后等待2秒,再打印"this is fun(n)"(如果main函数中输出部分不加\n,则main函数要输出的内容会先放到标准输出...
     
     
    
                                                                            atexit函数的用法
    首先先看一个实例:


           根据上方例图就会发现:atexit函数先注册四个fun函数,然后等待2秒,再打印"this is fun(n)"(如果main函数中输出部分不加\n,则main函数要输出的内容会先放到标准输出缓冲区中,当main中调用exit函数的时候,会做一些自身清理工作,同时刷新标准输出缓冲区中的内容),当执行到exit(0)时,exit会自动调用这些已注册过的函数,但是由于压栈过程中先入后出的原则,所以先注册的函数最后执行

    关于atexit:


    一个进程可以登记多达32个函数,这些函数将由exit自动调用,通常这32个函数被称为终止处理程序,并调用atexit函数来登记这些函数,atexit的参数是一个函数地址,当调用此函数时无须传递任何参数,该函数也不能返回值,atexit函数称为终止处理程序注册程序,注册完成以后,当函数终止是exit()函数会主动的调用前面注册的各个函数,但是exit函数调用这些函数的顺序于这些函数登记的顺序是相反的,这实质上是参数压栈造成的,参数由于压栈顺序而先入后出。同时如果一个函数被多次登记,那么该函数也将多次的执行。

    关于exit:

    exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。
    exit()函数用于在程序运行的过程中随时结束程序,exit的参数state是返回给操作系统,返回0表示程序正常结束,非0表示程序非正常结束
     
    展开全文
  • atexit函数简述

    2017-02-21 00:03:37
    atexit函数是一个特殊的函数,它是在正常程序退出时调用的函数,我们把他叫为登记函数(函数原型:int atexit (void (*)(void))):  ⼀个进程可以登记若⼲个(具体⾃⼰验证⼀下)个函数,这些函数由exit⾃动调...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,693
精华内容 4,277
关键字:

atexit函数