我正在尝试使用atexit ()
注册一个函数,该函数将根据程序的当前状态打印不同的消息。我知道当你用atexit
注册函数时,你无法传递参数。
那么,如何传递程序状态,比如一个整数,并使该函数打印出不同的语句?
我知道我可以注册多个功能,但我只能使用一个。
答案 0 :(得分:2)
使用全局变量。您可以使用atexit
注册的功能阅读。
答案 1 :(得分:2)
不使用atexit
,而是使用on_exit
函数将传递给exit()
的状态作为一个参数,并使用void *
来传递。{1}}。
int on_exit(void(* function)(int,void *),void * arg);
on_exit()函数注册要调用的给定函数 正常的过程终止,无论是通过退出(3)还是通过返回 程序的主要()。该函数被传递给给定的status参数 最后一个电话 从on_exit()退出(3)和arg参数。
可以多次注册相同的功能:每次注册都会调用一次。 通过fork(2)创建子进程时,它会继承其父进程的副本。成功打电话给其中一个 exec(3)函数,所有注册都被删除。
答案 2 :(得分:1)
这是一个不同的想法。您可以使用更简单的打印输出包装,而不是使用全局变量或不同的atexit处理程序
所需的消息然后调用exit
。
void my_exit(int rc)
{
/* Assuming you have enum constants ERR_1, etc,
* with expected error codes and 0 isn't an error condition. */
switch(rc) {
case ERR_1:
/* print message */
break;
case ERR_2:
/* print message */
break;
...
}
exit(rc);
}
您可以直接使用整数常量或使用if-else语句,而不是ERR_1等。现在,您可以将退出代码传递给my_exit
,并在您使用exit()
的任何地方使用它。您也可以使用main()
在my_exit(0)
结束时调用它。