如何使用 atexit() 函数来清理函数调用?
How can I use atexit() function to cleanup function call?
我在我的代码中使用 atexit() 函数来清理函数调用,但它不起作用。
#include<stdio.h>
void ftn(void)
{
printf(" Function called --> exit\n");
return;
}
int main(void)
{
int x = 0;
atexit(ftn);
for(;x<0xffffff;x++);
_exit(0);
}
如有任何帮助,我们将不胜感激。
atexit() 函数的这种行为是由于使用了函数 _exit()。此函数不调用 clean-up 函数,如 atexit() 等。如果需要调用 atexit(),则应使用 exit() 或 'return' 而不是 _exit()。
作为:
#include<stdio.h>
void ftn(void)
{
printf(" Function called --> exit\n");
return;
}
int main(void)
{
int x = 0;
atexit(ftn);
for(;x<0xffffff;x++);
exit(0);
}
_exit
关闭程序而不调用退出方法 Further reading。
因此,使用 exit(0);
而不是 _exit(0);
#include<stdio.h>
void ftn(void)
{
printf(" Function called --> exit\n");
return;
}
int main(void)
{
int x = 0;
atexit(ftn);
for(;x<0xffffff;x++);
exit(0);
}
Quoting the man page for _exit()
The _Exit()
and _exit()
functions shall not call functions registered with atexit()
nor any registered signal handlers. Whether open streams are flushed or closed, or temporary files are removed is implementation-defined. Finally, the calling process is terminated with the consequences described below.
所以您看到的是预期的行为。
也就是说,您应该包含 unistd.h
(对于 _exit()
)和 stdlib.h
(对于 atexit()
)headers 以包含原型。
如果要调用atexit()
注册的函数,应该调用exit()
。
The exit()
function shall first call all functions registered by atexit()
, in the reverse order of their registration, [....]
我在我的代码中使用 atexit() 函数来清理函数调用,但它不起作用。
#include<stdio.h>
void ftn(void)
{
printf(" Function called --> exit\n");
return;
}
int main(void)
{
int x = 0;
atexit(ftn);
for(;x<0xffffff;x++);
_exit(0);
}
如有任何帮助,我们将不胜感激。
atexit() 函数的这种行为是由于使用了函数 _exit()。此函数不调用 clean-up 函数,如 atexit() 等。如果需要调用 atexit(),则应使用 exit() 或 'return' 而不是 _exit()。
作为:
#include<stdio.h>
void ftn(void)
{
printf(" Function called --> exit\n");
return;
}
int main(void)
{
int x = 0;
atexit(ftn);
for(;x<0xffffff;x++);
exit(0);
}
_exit
关闭程序而不调用退出方法 Further reading。
因此,使用 exit(0);
而不是 _exit(0);
#include<stdio.h>
void ftn(void)
{
printf(" Function called --> exit\n");
return;
}
int main(void)
{
int x = 0;
atexit(ftn);
for(;x<0xffffff;x++);
exit(0);
}
Quoting the man page for _exit()
The
_Exit()
and_exit()
functions shall not call functions registered withatexit()
nor any registered signal handlers. Whether open streams are flushed or closed, or temporary files are removed is implementation-defined. Finally, the calling process is terminated with the consequences described below.
所以您看到的是预期的行为。
也就是说,您应该包含 unistd.h
(对于 _exit()
)和 stdlib.h
(对于 atexit()
)headers 以包含原型。
如果要调用atexit()
注册的函数,应该调用exit()
。
The
exit()
function shall first call all functions registered byatexit()
, in the reverse order of their registration, [....]