首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C程序中atexit()函数的任何小的实用示例

C程序中atexit()函数的任何小的实用示例
EN

Stack Overflow用户
提问于 2014-04-16 15:40:28
回答 3查看 363关注 0票数 2

我在Unix程序中读到了atexit()函数,也知道它是如何工作的,但是我找不到任何可以使用它的场合。有没有人能给出一个小的实用的C程序示例,让我可以使用它?

EN

回答 3

Stack Overflow用户

发布于 2014-04-16 15:48:07

考虑一个程序,在这个程序中,你动态地分配内存和使用一些资源,比如文件,程序可能会根据条件在很多点上退出,然后你需要添加代码来关闭文件,并在所有这些可能的退出点处释放资源。但是如果你在atexit()中使用了一个函数,那么你就可以在那里清除它们。这是一个可能的情况。因此,可以编写在程序停止执行之前要完成的任务,并使其在退出时执行。

一个问题的例子可能是,

假设程序有多个测试条件,在每个条件成功时,一些数据被写入一个文件。如果条件不成立,则程序退出。如果不满足所有条件,则应恢复写入文件的数据。因此,在这种情况下,您可以编写一个在退出时调用函数,然后该函数可以使用某个标志等检查是否传递了可接受数量的条件,然后执行所需的操作。这也可以使用其他方法来完成,但是atexit函数可以使实现变得更容易或减少LOC。

票数 1
EN

Stack Overflow用户

发布于 2014-04-16 16:02:38

这里有一个小的,相当愚蠢的例子。

代码语言:javascript
运行
复制
#include <stdio.h>
#include <stdlib.h>


static char temp_filename[255] = "/tmp/tempXXXXXX";


static void do_work(void)
{
  /* create a temporary file */
  mkstemp(temp_filename);
  printf("Created temporary file %s\n", temp_filename);

  /* simulate some work */
  sleep(10);
}

static void cleanup(void)
{
  /* remove temporary files, etc. */
  unlink(temp_filename);

  printf("Exiting...\n");
}

int main(int argc, char **argv)
{
  /* register cleanup handler */
  atexit(cleanup);

  printf("Starting...\n");

  /* do some work */
  do_work();

  return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2014-04-16 16:21:16

这里有一个标准的例子。

http://www.cplusplus.com/reference/cstdlib/atexit/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23102982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档