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
with 0 Comment

在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 0 Comment

关于调用约定(cdecl、fastcall、stcall、thiscall) 的一点知识

当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个、什么样的参数。即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。
函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以后,或者调用者、或者函数本身修改堆栈,使堆栈恢复原装。在参数传递中,有两个很重要的问题必须得到明确说明:
1) 当参数个数多于一个时,按照什么顺序把参数压入堆栈;
2) 函数调用后,由谁来把堆栈恢复原装。
3)函数的返回值放在什么地方

Filed in GNU C/C++, 转载, 随笔
with 0 Comment

PHP:Header

PHP header()
The function declaration: void header ( string string [, bool replace [, int http_response_code]])
The optional replace parameter indicates whether the header should replace a previous similar header, or add a second header of the same type. By default it will replace(true);

Filed in PHP应用
with 0 Comment

Perl的特别之处

因为项目需要, 要改进一个抓取网页内容的脚本, 用到了perl,从刚开始看到别人的perl脚本就感觉象天书,到今天已经正常work了一天一夜的脚本, 这三天时间里的一些收获,主要是一些,大家一般来说不太容易理解的概念,或者说是,在C/C++,PHP,JAVA,JS中不常见的一些个语法, 给初学perl的朋友一些启示, 当然,对于perl牛人来说,就不值得一看了….

Filed in 随笔
with 0 Comment

一个误区(关于javascript的字符串拼接)

前段时间听说了一个问题,说是,javascript中使用+=来拼接字符串会比使用Array的join方法慢几十倍以上,今天在工作间歇,就写了个例 子验证了一下,结果确完全相反,使用+=比join要快(在50000个简单拼接循环)200多milliseconds,真是很意外,最后经过仔细研 究,发现原因再于,我使用的测试环境,Firefox(Ubutun), 呵呵,原来是这样的。 在IE下,确实使用Join要比+=快几十倍,但,在IE下它们整体要比firofox慢1个数量级; 在ie下解释为什么+=比join慢的原因,是因为,在IE下,String是固定内存的,每次+=都会重新分配内存。而使用Array的join方法则不会。 而为什么IE下整体要比firefox慢,是因为,IE的垃圾回收机制,每次重新分配内存以后,都会回收废弃的内存,目前只是猜测,因为IE的整体内存使 用要比firefox少很多,firefox的垃圾回收机制是和IE完全不一样的。还没有经过验证,但知道这个结论就够了。 不过,目前来说,因为绝大多数网民还是使用IE系列的浏览器多点,所以在大型的js工作中,还是可以考虑用Array的join代替+=。

Filed in Js/CSS
with 0 Comment

授人渔而非鱼

慢慢的,2年多了,会想起来这俩年作PHP的过程, 发现一个问题, 如果你能在你开始的时候遇到一个很会帮助你的人, 你将会成长的很自然,很快。 还记得刚来国关的时候,因为高调,和黄胖子一拍即合,无比激情的创建了我们的工作室, 还记得第一个工作是,羽毛球俱乐部,呵呵,在那之前,我根本就没有写过PHP, 那个时候,就是,黑色的屋子,一本书《php和mysql编程宝典》(当然,现在看来这本书,并没有多好), 然后就是百度, 我只能说, 百度 那个时候是我的唯一的老师。。呵呵 自己摸索了大半年,搞了一套CMS出来, 那段时间,真是要看孩子一样对待它,整了一堆的版权申明阿,copyright阿,呵呵,现在看起来,还是挺像那么回事的。 扯远了, 不记得什么时候加入了一个PHP QQ群, 慢慢的我发现,问我问题的人越来越多了,刚开始,我还是挺耐心,但,人多了,实在是, 同样的问题,不同水平层次的人, 终于明白为什么以前老觉得那些牛人怎么那么牛,说话高深莫测,嘿嘿,都是懒得多说一句话。。。。 所以,我觉得,当一个人,尤其是新手,请教你问题的时候,其实,你不必要回答的非常完全,点到即可, 你要让他明白如何去解决以后类似的问题,一次,2次,他就不会再轻易的问一些很简单的问题。 而,再问你问题的时候,或许你也就会对这个问题感兴趣, 也许是你没有注意过的。或许是有趣的,这样,你们之间的这种互动,就更能让他们快速成长了。 当然,对于你自己也是很有益的,记得上次有个家伙问我__autoload()的问题,呵呵 就是刚刚被一个小孩子给烦的。。。。一下想了这么多,不知道归什么类了。。。…

Filed in 随笔
with 0 Comment