在signal.h
中有signal
函数的声明:
void (*signal(int signo, void (*func)(int))) (int);
如何解释这个以及以这种奇怪的方式声明的用法是什么?
答案 0 :(得分:3)
signal
函数将int
和函数指针作为参数,并返回一个函数指针。函数指针参数和返回的函数指针各自采用int
参数,并返回void
。
signal
原型有时以这种方式编写:
typedef void (*signal_handler_type) (int);
signal_handler_type signal (int, signal_handler_type);
由于signal
函数允许调用者替换现有的信号处理程序,因此它返回调用后替换的那个。
答案 1 :(得分:1)
在APUE上,
信号功能的原型说明了该功能 需要两个参数并返回一个指向函数的指针 什么都不返回(无效)。信号函数的第一个参数signo, 是一个整数。第二个参数是指向函数的指针 采用单个整数参数并且不返回任何内容。功能 其地址以signal的值为单位返回 整数参数(final(int))。用简单的英语,这个 声明表示信号处理程序传递一个整数 参数(信号编号)并且它不返回任何内容。当我们打电话 信号建立信号处理程序,第二个参数是a 指向函数的指针。信号的返回值是指针 到上一个信号处理程序。
可以制作所示的复杂信号函数原型 通过使用以下typedef更加简单:
typedef void Sigfunc(int);
然后原型成为
Sigfunc *signal(int, Sigfunc *)
答案 2 :(得分:0)
Signal
函数指定一种处理信号的方法,其中信号号由signo(此处)指定。
参数func
指定程序可以处理信号的三种方式之一:
你可以看
[这里] [1]
[1]:http://www.cplusplus.com/reference/csignal/signal/了解更多详情