-3

里面有函数signal.h声明signal

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

如何解释这一点以及以这种奇怪的方式声明有什么用?

4

3 回答 3

3

signal函数接受一个int和一个函数指针作为参数,并返回一个函数指针。函数指针参数和返回的函数指针各有一个int参数,并返回void

signal原型有时是这样写的:

typedef void (*signal_handler_type) (int);

signal_handler_type signal (int, signal_handler_type);

由于该signal函数允许调用者替换现有的信号处理程序,因此它返回调用后被替换的信号处理程序。

于 2013-06-22T05:38:45.450 回答
1

在 APUE 上,

信号函数的原型声明该函数需要两个参数并返回一个指向不返回任何内容的函数的指针 (void )。信号函数的第一个参数 signo 是一个整数。第二个参数是一个指向函数的指针,该函数接受一个整数参数并且不返回任何内容。地址作为信号值返回的函数采用单个整数参数(最终的 (int) )。用简单的英语,这个声明说信号处理程序被传递了一个整数参数(信号号)并且它什么都不返回。当我们调用信号建立信号处理程序时,第二个参数是一个指向函数的指针。signal 的返回值是指向前一个信号处理程序的指针。

通过使用以下 typedef,可以使显示的令人费解的信号函数原型变得更加简单:

typedef void Sigfunc(int);

那么原型就变成了

Sigfunc *signal(int, Sigfunc *)
于 2013-06-22T05:40:55.750 回答
0

Signal函数指定一种处理信号的方法,信号编号​​由signo(here) 指定。

参数func指定程序可以处理信号的三种方式之一:您可以查看[此处][1]

[1]:http ://www.cplusplus.com/reference/csignal/signal/了解更多详情

于 2013-06-22T05:43:39.460 回答