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

Linux Kernel中list解读


标签:
it
分类:
linux_kernel
作者:Sam (甄峰) sam_code@hotmail.com
Sam之前看2.4
kernel时,常看到List.也仔细看了一下,但现在长期没有看kernel,没有写程序,已经忘记了很多。今天又看一看并记录下来。
Linux
Kernel中,常常需要使用双向链表。在~/include/linux/list.h中,就定义了双向链表和常用的function.
链表头如下:
struct list_head {
 struct list_head *next, *prev;
};
1.创建双向链表(doubly linked
list):
INIT_LIST_HEAD(
struct list_head
*list
)
代码如下:
static inline void INIT_LIST_HEAD(struct list_head *list)
{
 list->next = list;
 list->prev = list;
}
将List的头和尾都指向自身。
2. 添加内容到双向链表:
2.1: 平常的添加:
2.1.1:将新项目添加到list的头部(head之后第一个位置)。注意,此处head是指此双向链表头。
void list_add(struct list_head *new, struct list_head *head)
将参数一(new)添加到head之后。它调用
__list_add(new, head,
head->next);也就是说,把new添加到head和head->next之间。
static inline void __list_add(struct
list_head *new,
        
struct list_head *prev,
        
struct list_head *next) //它只是将new添加到prev和next之间
{
 next->prev = new;
 new->next = next;
 new->prev = prev;
 prev->next = new;
}
2.1.2:将新项目添加双向链表最后一个位置(也就是head的priv)。注意此处head表示list头。
static inline void list_add_tail(struct
list_head *new, struct list_head *head)
{
 __list_add(new, head->prev,
head);
}
则将new添加到head->prev和head之间了。
2.2:读拷贝更新(rcu)模式的添加(smp_wmb()
)(请看背景知识)
2.2.1: 将新项目加到以知的prev和next之间:
static inline void __list_add_rcu(struct
list_head * new,
  struct list_head * prev, struct
list_head * next)
{
 new->next = next;
 new->prev = prev;
 smp_wmb();
 next->prev = new;
 prev->next = new;
}//此处注意:smp_wmb();
smp_wmb()防止编译器和CPU优化代码执行的顺


相关文档:

Linux 监控/SNMP配置


Linux系统的SNMP服务设置
1) 安装SNMP
略,请参阅LINUX系统SNMP安装说明,一般情况下Linux中的均已经自动安装了SNMP服务。以下命令可以检测SNMP服务是否安装以及安装的文件包。
[root@idc ~]# rpm -qa |grep snmp
net-snmp-libs-5.1.2-11.EL4.7
net-snmp-5.1.2-11.EL4.7
 
2) 配置SNMP
按照如下方式修改/etc ......

linux rehl 5 dns 详解3


RHEL5搭建DNS服务器实现名称解析 三
 
 
(二)named.conf文件说明:
此文件需用户自己创建,可从/usr/share/doc/bind-9.3.3/sample/etc中复制到/var/named/chroot/etc/目录下
// Sample named.conf BIND DNS server 'named' configuration file
// for the Red Hat BIND distribution.
// See the BIND ......

简单的Linux服务器监控脚本

#!/bin/bash
cpu=`top -b -n 1 | grep -w Cpu | awk '{print$5}'| awk -F '%' '{printf"%d",$1}'`
if [ $cpu -le 50 ]
then
echo "cpu: $((100 - cpu))%" > test.txt
mail -s "服务器紧急, CPU占用率过高!" yourmail@domail.com < test.txt
fi
mem=`top -b -n 1 | grep -w Me ......

Samba 安装及简单配置、windows访问linux的简单例子


由于在安装rhel5的时候没哟安装到好Samba,现在只能从新安装了。郁闷啊!(在init.d中没有发现smb和nmb这两个文件)
还好在安装盘里能够找到安装文件。这里就不说了(一堆samba开头的文件。一阵狂点就行了。呵呵……)
Samba 两个服务器相关启动程序、客户端及服务器配置文件
Samba 有两个服务器,一个是s ......

linux获取系统时间

1.时间表示
在程序当中,我们经常要输出系统当前的时间,比如我们使用date命令的输出结果。这个时候我们可以使用下面两个函数
time_t time(time_t *tloc);                    //时间精度为秒
char *ctime(const time_ ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号