Press "Enter" to skip to content

由signal想到的

signal(int sig, void(*func)(int))是信号注册函数。它可以定制对于特定的信号(sig)的处理函数。
昨天偶然看到他的申明式的时候,把我搞的有点糊涂
#include
void(*signal(int signo, void(*func)(int)))(int);
仔细理解了半天,终于搞清楚了它的定义式,也解开了我长期以来的一个误区:
1. void(*func)(int):
定义了一个函数指针,他的类型是,指向一个返回是void,参数的int的函数类型的指针,就好像 int i, 定义了一个可以存储int型的变量的i。
2. 由上,signal的定义可以如下解释。
signal(int signo, void(*func)(int));
定义了,signal函数接受俩个参数一个是int signo,一个是一个回调的函数指针。
void(* signal(....))(int);
定义了,signal的返回类型是一个函数指针,指向一个返回空的,接受一个整形参数(信号值)的函数;
这么解释,就好多了,再看看简化的定义式,就更明白了(Plauger 1992):
typedef void sigfunc(int);
sigfunc *signal(int, sigfunc *);
由此,我结合fork进行了一番试验, 来验证,子进程是否继承父进程的信号处理函数......

Filed in PHP Extension
Comments closed

在PHP Module中获取$_GET/$_POST/$_COOKIE的方法研究

  最近在做一个PHP的安全模块,其中要在Module的函数中获取用户的Cookie,从而生成签名;今天找遍Baidu/Google,一点相关资料都 没有,不得已,只好给yahoo PHP dev mail list发了求救信。后来,偶然在Google上看到了一个变量 http_globals ,眼前一亮,虽然没有详细资料,但经过一顿试,N次Segmentation fault以后,终于成功!

Filed in PHP Extension, PHP应用, PHP源码分析
with 18 Comments