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

linux内核(2.6)中的双循环链表浅析

       Linux 2.6内核链表数据结构的实现
在计算机科学中,链表是非常通用的数据结构,贯穿于整个linux的内核。在linux内核中,链表通常以
双循环链表的方式出现。所有链表的代码在include/linux/list.h文件中。
定义如下:
struct list_head {
struct list_head *next, *prev;
};
这里的list_head没有数据域。在Linux内核链表中,不是在链表结构中包含数据,而是在数据结构中包含链表。
list.h还定义了许多使用的宏和内联函数,下面介绍几个典型的:
#define LIST_HEAD_INIT(name) { &(name), &(name) }
#define LIST_HEAD(name) \
struct list_head name = LIST_HEAD_INIT(name)
static inline void INIT_LIST_HEAD(struct list_head *list)
{
list->next = list;
list->prev = list;
}

在linux的宏定义中,时常用到do{}while(0),这是为了方便再宏定义中包含多行代码,
关于这个的说明在网上可以找到很多详细的介绍。
在宏INIT_LIST_HEAD中,将它初始化为前后都指向自己
在linux内核的链表中,一个空链表定义如下: head->next指向链表的头元素。
list.h中还定义了 list_add() , list_add_tail(),list_del()等基本的链表操作函数,都是比较简单的
C语言这里不详述。
 
在list.h中极其有用的一个宏是list_for_each_entry
#define list_for_each_entry(pos, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member); \
prefetch(pos->member.next), &pos->member != (head); \
pos = list_entry(pos->member.next, typeof(*pos), member))
它可以遍历整个链表,在linux用的非常广泛,例如当CPU开始工作时,激活在工作队列中的每个进程
-----------------------------------------------------------------------------
kernel/workqueue.c
59 struct workqueue_struct {
60   struct cpu_workqueue_struct cpu_wq[NR_CPUS];
61   const char *name;
62   struct list_head list; /* Empty if single thread */
63 };
  ...
466   case CPU_ONLINE:
467     /* Kick off worker threads. */
468     list_for_each_entry(wq, &workqueues, list)
469     &nb


相关文档:

linux 库的理解

 
一.库的分类
    有两种说法,如果熟悉WIN平台下的DLL,相信不难理解:
   
库可以有三种使用的形式:静态、共享和动态。静态库的代码在编译时就已连接到开发人员开发的应用程序中,而共享库只是在程序开始运行时才载入,在编译时,
只是简单地指定需要使用的库函数。动态库则是 ......

Linux FTP 服务器配置方法

用tar包配置高可用性vsftp
vsftpd安装包:ftp://vsftpd.beasts.org/users/cevans/
开启: service iptables start
关闭: service iptables stop
/etc/init.d/iptables start/stop
或者在任何目录下都可以用你上面得命令。两者是相等的。
第二个问题是因为你的主机名改掉了。
修改下面两个文件
1./etc/hosts ......

Linux系统下ifconfig命令使用及结果分析[转]

 Linux下网卡命名规律:eth0,eth1。第一块以太网卡,第二块。lo为环回接口,它的IP地址固定为127.0.0.1,掩码8位。它代表你的机器本身。
1、ifconfig是查看网卡的信息。
 
ifconfig [Interface]
Interface是可选项,如果不加此项,则显示系统中所有网卡的信息。如果添加此选项则显示所指定的网卡信息
&nbs ......

linux下安装gd库并且支持socket

一、下载
gd-2.0.33.tar.gz http://www.boutell.com/gd/
jpegsrc.v6b.tar.gz http://www.ijg.org/
libpng-1.2.7.tar.tar http://sourceforge.net/projects/libpng/
zlib-1.2.2.tar.gz http://sourceforge.net/projects/zlib/
freetype-2.1.9.tar.gz http://sourceforge.net/projects/freetype/
php-4.3.9.tar.g ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号