最近在看ipset的代码,ipset实现了一个ip地址集合的操作,是linux中netfilter的操作子集,ipset在netfilter中起作用,它的逻辑很简单,基本是纯算法的,很少涉及到内核调试,所以想详细研究一下,因为工作机是windows的,于是不得不将压缩包拷贝到windows,用winrar解压,解压之后开始看代码,没有发现match的注册,按理说每个匹配操作都应该有一个match函数的,ipset显然需要自己的match函数,但是我没有找到,于是我开始怀疑自己的眼睛,难道ipset用了一种很神奇的方式来定义match吗?我觉得源码的作者不可能无聊到这个地步...
花了大半天之后,我点击了ipset的压缩包,发现里面有两个ipt_set.c,一个就是ipt_set.c,另一个是ipt_SET.c,于是我恍然大悟,windows不区分大小写,ipt_SET.c和ipt_set.c就是同一个文件,因此解压的时候就会相互覆盖,从而丢失了一个,这就是根本的原因,发现了这个之后我诅咒了上帝,招来了一群windows爱好者的反对,他们硬说ipset的作者不应该这么给文件起名字...别的不说,我只想问一下,现实世界中,A和a一样吗?即使在计算机的最原始编码中,ascii的A和a是一个数吗?如果windows称霸天下,微软难道要将a和A定义成一样吗?事实上微软也有两套标准,在windows的文件系统中,A和a是没有区别的,但是在其api或者别的什么中,即使是微软也要遵循国际标准,起码遵循ascii和unicode
本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271923