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

linux中的list

Linux内核提供了list这个数据结构以及操作函数。这个数据结构在内核驱动中使用广泛,而且确实方便使用。为了详细了解这个数据结构的用法,方便以后使用,把这个数据结构里面的功能都试用了一次,清楚了很多。下面是实验程序和自己得出的使用方法,请高手多多指教。 Struct list_head { struct list_head *next, *prev ;}; List结构实际上是一个list_head结构构成的链表。如果想使用这个结构来构造自己的链表,只要把这个struct list_head结构嵌入到自己的结构体中,成为自己结构体的一个成员即可。整个list.h文件的函数都使用这个结构构成一个链表,而自己的结构体成员实际并不在链表上,但是list.h中使用container_of这个宏可以通过结构体中的struct list_head成员的地址来得到整个结构体的地址,这样就可以实现使用list.h文件中的定义实现自己的链表构造了。 list.h提供的函数构造的链表是有一个空头节点的。 如果在用户程序中使用这个结构的话,需要对这个文件做一些改动。主要是找不到如何将这个头文件直接安装到/usr/include目录下,只好直接拷贝。但是这个头文件中同时包含了另外的两个体系相关的头文件,一个是prefetch.h文件,这个文件提供perfetch这个函数用来针对特定的CPU体系做优化;另一个是asm/system.h这两个文件无法提供,只能不拷贝,将list.h中使用到这两个文件的部分直接拷贝到list.h文件中。主要是container_of宏(这个在kernel.h中;另外需要将所有的prefetch注释掉,否则无法链接通过。 LIST_HEAD(name):这个宏可以定义一个struct list_head结构体,并初始化结构体中的两个成员函数 LIST_INIT_HEAD( struct list_head *head) ;这个函数初始化给定的结构体,使的成员指向自己; List_add ( struct list_head *new , struct list_head *list );new是要添加到list链表中的节点;list是要添加到的链表中的一个节点,new这个节点会添加到这个节点后面。如果提供的list是一个链表的头节点,那么这个函数用来模拟一个LIFO的栈是不错的。 list_add_tail( struct list_head *new , struct list_head *list );和上面的函数一样,只不过是new的位置在list的前面。如果提供的list是一个链表的头节点,那么就是一个FIFO的队列。 list_del (struct list_head *entry , struct list_head *list );从链表中删除entry节点,并将entry节点的成员指针指向无效地址。 list_replace(struct list_head * new , struct list_head *old);用节


相关文档:

linux做网管

echo "1" > /proc/sys/net/ipv4/ip_forward
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
iptables -F
iptables -X
iptables -Z
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
iptables -P INPUT ......

用Vmware安装linux提示未找到任何驱动器

 
screen.width*0.7)
{this.resized=true; this.width=screen.width*0.7; this.alt='Click here
to open new window\nCTRL Mouse wheel to zoom in/out';}"
onmouseover="if(this.width>screen.width*0.7) {this.resized=true;
this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='C ......

linux基本驱动和linux字符设备驱动

 先粘贴一个linux最简单的驱动,其实对于一个从2.4玩上来的人来说,驱动不复杂,比较不习惯的是那个makefile
驱动本身:
hello.c:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(vodi){
 &nbs ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号