需要C信号代码说明

Nik*_*kky 2 c

我们在教科书中遇到了这段代码,除了处理信号这一事实外,还没有解释.

#include <signal.h> 
void (*signal(int signr,
            void(*sighandler)(int)
        )
    )(int)
Run Code Online (Sandbox Code Playgroud)

我知道这sighandler是一个函数的指针,但我不明白它是否实际执行或只是返回?

和电话有(int)什么关系?它看起来几乎像一个反转的演员.

dbu*_*ush 5

这是该signal功能的签名.

第一个参数signr是type 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
Run Code Online (Sandbox Code Playgroud)

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

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);
Run Code Online (Sandbox Code Playgroud)