易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux netfilter源码分析(3)

转贴自:http://alexanderlaw.blog.hexun.com/8968782_d.html
三、ipt_table表的注册
 
init()函数初始化时调用了ipt_register_table函数进行表的注册
 
3.1  ip_tables.c 表的注册 ipt_register_table
int ipt_register_table(struct ipt_table *table)
{
       int ret;
       struct ipt_table_info *newinfo;
       static struct ipt_table_info bootstrap
              = { 0, 0, 0, { 0 }, { 0 }, { } };
 
/*宏MOD_INC_USE_COUNT用于模块计数器累加,主要是为了防止模块异常删除,对应的宏MOD_DEC_USE_COUNT就是累减了*/
       MOD_INC_USE_COUNT;  
 
/*为每个CPU分配规则空间*/
       newinfo = vmalloc(sizeof(struct ipt_table_info)
                       + SMP_ALIGN(table->table->size) * smp_num_cpus);
       if (!newinfo) {
              ret = -ENOMEM;
              MOD_DEC_USE_COUNT;
              return ret;
       }
 
/*将规则项拷贝到新表项的第一个cpu空间里面*/
       memcpy(newinfo->entries, table->table->entries, table->table->size);
 
/*translate_table函数将newinfo表示的table的各个规则进行边界检查,然后对于newinfo所指的ipt_talbe_info结构中的hook_entries和underflows赋予正确的值,最后将表项向其他cpu拷贝*/
       ret = translate_table(table->name, table->valid_hooks,
                 &


相关文档:

Linux设备模型之input子系统详解

一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......

linux内核学习之likely()和unlikely()

参考资料 : linux内核设计和实现 P13
likely()和unlikely()是内核编译时用于优化 if 判断语句的宏
likely()代表优化
unlikely()代表不优化
一般为了效率 由程序员自己判断if语句里面的内容是否要优化,显然如果if语句里面的内容有很大的概率会执行到就该优化,不然就不必优化
if(likely(A != 0))

.. ......

(转载)关于Linux内核学习

常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需:
  1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(time-s ......

linux下动态链接库的加载及解析过程

http://hi.baidu.com/hust_chen/blog/item/54a8c516231d0c0ec93d6d3e.html
linux下动态链接库的加载及解析过程(ZZ)
2008-12-18 15:19
表面上看,动态链接库(dll)的加载及解析是一个十分繁复的过程,其中牵涉到的数据结构及其之间的关系也让人望而生畏。Whatever,学习这 事情,说到底是没有捷径可走的,除了死啃仅有 ......

[C++] Linux下的itoa函数

上篇文章说到linux需要itoa函数,下面我就提供一份跨平台的itoa函数。
//return the length of result string. support only 10 radix for easy use and better performance
int my_itoa(int val, char* buf)
{
    const int radix = 10;
    char* p;
    int a;&nbs ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号