需要C信号代码说明

时间:2017-11-28 17:46:24

标签: c

我们在教科书中遇到了这段代码,但缺乏解释 除了它处理信号的事实。

#include <signal.h> 
void (*signal(int signr,
            void(*sighandler)(int)
        )
    )(int)

我知道sighandler是一个指向函数的指针,但我不明白它是实际执行还是刚刚返回?

(int)的通话有什么关系? 它看起来几乎像一个反向演员。

1 个答案:

答案 0 :(得分:5)

这是signal函数的签名。

第一个参数signr的类型为int,是您要更改其处理程序的信号。

第二个参数sighandler是类型为void (*)(int)的函数指针,即一个采用int并返回void的函数。此参数是将处理信号的函数的名称。

该函数返回一个类型为void (*)(int)的函数指针(与参数2的类型相同),它指向前一个信号处理函数。

打破它:

 signal                                 // signal
 signal()                               // is a function
 signal(int)                            // taking a int
 signal(int, void (*)(int))             // and a function pointer
                                        // which takes an int and return void
 (*signal)(int, void (*)(int))(int)     // and returns a function pointer
                                        // which takes an int
 void (*signal)(int, void (*)(int))(int)   // and returns void

手册页包含一个typedef,使其更加清晰:

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);