我在Unix程序中读到了atexit()函数,也知道它是如何工作的,但是我找不到任何可以使用它的场合。有没有人能给出一个小的实用的C程序示例,让我可以使用它?
发布于 2014-04-16 15:48:07
考虑一个程序,在这个程序中,你动态地分配内存和使用一些资源,比如文件,程序可能会根据条件在很多点上退出,然后你需要添加代码来关闭文件,并在所有这些可能的退出点处释放资源。但是如果你在atexit()中使用了一个函数,那么你就可以在那里清除它们。这是一个可能的情况。因此,可以编写在程序停止执行之前要完成的任务,并使其在退出时执行。
一个问题的例子可能是,
假设程序有多个测试条件,在每个条件成功时,一些数据被写入一个文件。如果条件不成立,则程序退出。如果不满足所有条件,则应恢复写入文件的数据。因此,在这种情况下,您可以编写一个在退出时调用函数,然后该函数可以使用某个标志等检查是否传递了可接受数量的条件,然后执行所需的操作。这也可以使用其他方法来完成,但是atexit函数可以使实现变得更容易或减少LOC。
发布于 2014-04-16 16:02:38
这里有一个小的,相当愚蠢的例子。
#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;
}发布于 2014-04-16 16:21:16
这里有一个标准的例子。
http://www.cplusplus.com/reference/cstdlib/atexit/
https://stackoverflow.com/questions/23102982
复制相似问题