linux经典list_head是基础吗,linux内核中的Hlist与List_head结构

linux内核中的Hlist与List_head结构

List_Head

操作系统内核经常需要维护数据结构。内核有标准的循环链表、双向链表的实现。在文件中定义了一个list_head类型简单结构:

struct list_head {

struct list_head *next, *prev;

};

通用链表的常用用途是将某一个数据结构本身串成链表,或将某些链表与一个数据结构联系起来,这两种情况实质上都是由结构list_head组成链表,只是list_head所“背负”的负载不一样。下面分别举例说明这两种用途。

以下示例说明了如何将某一个数据结构本身串成链表,并对链表进行操作,同时还说明list_head结构的实现与使用。

示例:将某一个数据结构本身串成链表。

(1)加入list_head结构成员。

假设有一个example_struct结构需连接成链表,因而在其结构里面加上list_head成员,就组成了结构链表,如下:

struct example_struct {

struct list_head list;

int priority;

……//其他成员

};

在example_struct结构中的list成员,用来将example_struct结构串成链表。可理解为list_head“背负”的负载是example_struct结构。

(2)创建list_head结构。

使用前必须申请链表头并用 INIT_LIST_HEAD 宏来初始化链表头。可使用两种方法。

方法1:

struct list_head example_list;

INIT_LIST_HEAD(&example_list);

方法2:

LIST_HEAD(example_list);

其中,这两个宏在include/Linux/list.h中定义如下:

#define LIST_HEAD(name) \

struct list_head name = LIST_HEAD_INIT(name)

#define INIT_LIST_HEAD(ptr) do { \

(ptr)->next = (ptr); (ptr)->prev = (ptr); \

} while (0)

宏定义INIT_LIST_HEAD初始化了链表头,即向前、向后的指针都指向链表头。这样,就已初始化了一个example_list的链表头,以后就可以向链表中增加链表元素了。

(3)链表与用户结构连接。

list_entry宏将exmplelist链表与exmple_struct结构类型连接起来。

有两项链表的链表头

List_entry宏的效果

含list_head的定制结构

next

prev

list_head结构

空链表

中的链表

下面这个代码行就是从examplelist链表中得到节点对应的example_struct结构指针,其中ptr是exampleli

相关文档:

PHP在运行的时候,直接kill掉,有肯能造成数据的丢失。幸好php模块,有针对signal的处理。

处理方式,首先检查有没有安装 PCNTL 模块

然后可以在一个包含文件中,添加以下代码

global $exitFlag;

$exitFlag = false;

// 增加linux信号量处理

if (DIRECTORY_SEPARATOR != '\\') {

pcntl_signal(SI ......

1.java.sun.com/j2se/1.4.2/download.html">http://java.sun.com/j2se/1.4.2/download.html 下载一个Linux Platform的JDK,建议下载RPM自解压格式的(RPM in self-extracting file,j2sdk-1_4_2_06-linux-i586-rpm.bin);

2. 上载到Linux服务器上,在shell下执行命令:

[root@ ......

STAT(该行程的状态)

D: 不可用信号中断的睡眠状态

R: 正在执行或处于执行队列中

S: 可以用信号中断的睡眠状态

T: 暂停执行

Z: 僵死状态

------------------------------------

W: 没有足够的记忆体分页可分配

<:>

N: 低优先序的行程&nbs ......

在向大家详细介绍Linux mysql之前,首先让大家了解下Linux mysql,然后全面介绍Linux mysql,希望对大家有用。

1. Linux mysql安装:

$ yum install mysql-server

2. Linux mysql修改root密码:

$ mysqladmin -u root password

your_new_passwd

3. 启动Linux mysql服务

$ /etc/init.d/mysqld start

4. 添加为系统� ......

制作可移动的linux系统(Ubuntu)

1、光盘启动,安装复制到移动硬盘,将grub安装到dev/sda。

2、复制完后重启,光盘启动,安装启动界面输入rescue,进入急救模式,选择挂载分区时,选择系统所在硬盘和分区。

3、ctrl-Alt-F2,打开新窗口。

CODE:mount -tproc proc /target/proc

chroot /target

su

4、nano /etc/mkini ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值