- 博客(15)
- 收藏
- 关注
原创 C语言中的二级指针(1) -- 值传递问题
先看一个我们非常熟悉的代码:#include void swap(int a, int b){ int tmp; tmp = a; a = b; b = tmp;}int main(){ int a = 3, b = 5; swap(a, b); printf("a = %d, b = %d\n", a, b); return 0;}我们都知道,这段代码中的s
2015-04-25 22:54:51 3117 1
原创 C语言中的二级指针(2) -- 链表操作
一个链表中所有元素通过指针串联起来,链表的插入、删除等操作都是对指针的操作。使用指针操作链表例如,下面的代码段实现了一个删除链表节点的函数,很多人都会采用类似的代码删除链表节点。/* 结构体定义 */struct testdata{ struct testdata * next; //指向链表下一个节点的指针 int id;};/* 链表头 */struct testd
2015-04-25 22:38:57 5947 2
原创 Linux内核模块的编写方法和技巧
内核模块可以在不重新编译内核的情况下添加到内核代码中运行,其可以动态加载和卸载,因此可以根据需要将内核某些功能独立出来作为模块,而不是编译到内核中,这样可以减少内核大小,并且可以按照实际需求选择裁剪或添加某些内核功能。1. 编写一个内核模块需要先强调一个最基本的知识,内核模块是要运行在内核态的代码,所以编写内核模块需要包含的头文件都是内核中的头文件,使用的函数都是内核的函数。编写一
2015-04-12 12:44:46 3898
转载 Linux Kernel Documentation kbuild modules
内核源码目录下的Documentation/kbuild/modules.txt文件,详细介绍了模块的编写和编译的方法技巧。In this document you will find information about:- how to build external modules- how to make your module use the kbuild infrastru
2015-04-12 12:41:17 1769
原创 linux内核中的likely()和unlikely()宏的作用
在看linux内核代码的时候,经常会看到likely(x)和unlikely(x)宏的使用。那这两个宏有什么作用呢?这两个宏在内核中的定义如下:# define likely(x) __builtin_expect(!!(x), 1)# define unlikely(x) __builtin_expect(!!(x), 0)可见这里使用了gcc的内建函数__builtin_exp
2015-04-10 00:16:17 18836
原创 gcc的__builtin_函数介绍
GCC提供了一系列的builtin函数,可以实现一些简单快捷的功能来方便程序编写,另外,很多builtin函数可用来优化编译结果。这些函数以“__builtin_”作为函数名前缀。很多C标准库函数都有与之对应的GCC builtin函数,例如strcpy()有对应的__builtin_strcpy()内建函数。下面就介绍一些builtin函数及其作用:__builtin
2015-04-08 23:02:19 46303 6
转载 linux下提示 -bash: ******* :command not found
原文地址:http://blog.csdn.net/chuanj1985/article/details/6873717如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found。那么首先就要考虑root 的$PATH里是否已经包含了这些环境变量。主要是这四个:/bin ,/usr/bin,/sbin,
2015-04-04 23:49:41 15777
转载 vim显示行号、语法高亮、自动缩进的设置
原文地址:http://blog.csdn.net/chuanj1985/article/details/6873830在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为vimrc 在Fedora中vim的配置文件存放在/etc目录中,配置文件名为vimrc在Red Hat Linux 中vim的配置文件存放在/etc目录中,配置文件名为vimrc
2015-04-04 23:45:15 894
原创 Linux协议栈-netfilter(5)-iptables
iptables是用户态的配置工具,用于实现网络层的防火墙,用户可以通过iptables命令设置一系列的过滤规则,来截获特定的数据包并进行过滤或其他处理。iptables命令通过与内核中的netfilter交互来起作用。我们知道netfilter通过挂在每个hook点上的hook函数来过滤数据包,并且将过滤规则存放在几个表中供hook函数使用。相应的,iptables工具也定义了同样的几张规则
2015-04-04 22:36:15 4832
原创 Linux协议栈-netfilter(4)-期望连接
传统的conntrack和NAT处理只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令,在数据包载荷中需要包含地址信息,并且数据包如果需要做NAT,那应用层数据部分的地址也需
2015-04-04 22:18:18 5124
原创 Linux协议栈-netfilter(3)-NAT
本文对netfilter中NAT部分的源码进行分析,读者需要先对NAT的基本概念有一个大致了解。1. NAT模块的初始化NAT模块的初始化过程主要是初始化一些全局变量以及注册NAT相关的hook函数。在下面nf_nat_init()函数和nf_nat_standalone_init()函数的流程图中用红色标记了要初始化的全局数据结构。nf_nat_init()函数:nf_nat_standalon...
2015-04-04 18:45:22 3364 2
原创 Linux协议栈-netfilter(2)-conntrack
连接跟踪(conntrack)用来跟踪和记录一个连接的状态,它为经过协议栈的数据包记录状态,这为防火墙检测连接状态提供了参考,同时在数据包需要做NAT时也为转换工作提供便利。本文基于Linux内核2.6.31实现的conntrack进行源码分析。1. conntrack模块初始化1.1 conntrack模块入口conntrack模块的初始化主要就是为必要的全局数据结构进行初始化,代码流程如下:上...
2015-04-04 17:37:40 19400 2
原创 Linux协议栈-netfilter(1)-框架
1. netfilter框架Netfilter 是内核中进行数据包过滤,连接跟踪,地址转换等的主要实现框架。当我们希望过滤特定的数据包或者需要修改特定数据包的某些内容再发送出去,这些动作主要都在netfilter中完成。iptables工具就是用户空间和内核的Netfilter模块通信的手段,iptables命令提供很多选项来实现过滤数据包的各种操作,后面会讲到iptables命令如何
2015-04-04 14:52:30 16192 3
原创 中断下半部机制 - 软中断及tasklet
一个中断处理程序的一个或几个中断服务例程在执行结束之前,内核处于中断环境中,当前CPU不再响应同类型的中断,如果不允许中断嵌套,则CPU需要屏蔽掉所有中断。也就是说,一个CPU忙于服务于一个中断事件时,就不能处理其他中断,同时CPU不能执行其他进程,即不能被抢占,这种情况下,如果在中断服务例程中消耗的时间过多,就会对性能产生潜在的影响。一般情况下,一个中断事件所触发的动作可
2015-04-03 22:37:35 2684 1
原创 Linux的中断处理分析
MIPS中,中断被当作一种异常(第0号异常)来处理。中断由外部设备产生,可能发生在任何时刻,每个中断都有一个编号分配给一个外部设备,这样来区分不同设备产生的中断,如果硬件和内核支持共享中断,则可以由多个设备共享一个中断编号。 在CPU得知中断发生后,它将进一步的处理委托给一个软件例程,这个软件例程是体系结构相关的,然后根据中断号来识别中断源,并进入特定的中断处理程序来处理该中断。
2015-04-02 23:00:39 2273
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人