所以,有人能解释一下这个代码的作用吗?
这是从标准信号库中获取的定义。
void (*signal(int sig, void (*func)(int)) ) (int);
这是从标准信号库中获取的定义。
从名称开始:
signal
尽可能向右移动:
signal(int sig, void (*func)(int))
sig
的int
和一个名为func
的函数指针(稍后可以用同样的方式进行分析)。*signal(int sig, void (*func)(int))
因此,函数signal
返回一个指向...某物的指针。让我们拿掉括号,再往右走一步,因为我们可以:
(*signal(int sig, void (*func)(int)) ) (int)
signal
返回一个接受int
作为唯一参数的函数指针。然后再向左移动:void (*signal(int sig, void (*func)(int)) ) (int)
signal
返回指向接受int
并返回void
的函数的指针。signal
函数的参数如下:
int sig - a signal value
void (*func)(int) - a pointer to a function that takes an int and returns void
void (*)(int) - a function that takes an int and returns void
signal
函数可以注册一个函数,当信号发生时会被调用,并返回之前的函数处理器。
int sig
标识)。
void(*func)(int)
是指向将处理该信号的函数的指针(您可以提供自定义功能或使用SIG_DFL
SIG_IGN
,这是通常管理它或忽略它的默认操作)。signal
函数返回调用此函数之前存在的处理程序的指针,或者如果出现错误,则为SIG_ERR
。 这可用于在完成自定义行为后稍后恢复默认处理程序。通过引入一个typedef
,man手册使这个声明更容易理解:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
sighandler_t
被定义为一个指向接受 int
参数并返回 void
的函数的指针。
signal
是一个接受 int
(信号编号)和函数指针的函数,并返回一个函数指针。