这个宣言是什么?它的用途是什么?

时间:2013-06-22 05:34:32

标签: c linux

signal.h中有signal函数的声明:

void (*signal(int signo, void (*func)(int))) (int);

如何解释这个以及以这种奇怪的方式声明的用法是什么?

3 个答案:

答案 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/了解更多详情