给大家带来浅析Linux内核中的轮回链表布局
看不懂man文档的人.在linux中,命令可分为系统基本命令和应用程序命令.系统基本命令是所有的unix类系统都支持的命令,走到哪都不变,只要是unix类系统上就肯定有.文章中援用的代码来历于LXR,所剖析的内核版本是v2.6.31。
linux内核经由过程界说list_head和关于list_head上的一组操纵完成对分歧范例的轮回链表的同类操纵,这类做法制止了关于分歧数据范例的轮回链表界说反复的操纵函数,使代码失掉了充实的利用,是一种非常无效的编程办法。
list_head的界说:
19structlist_head{
20structlist_head*next,*prev;
21};
接着我们来看恣意一种数据布局的轮回链表,链表的每一个节点中到场了一个list_head范例的变量,节点的其他变量恣意。(注重:每一个指针所指向的地位不是节点数据的肇端地位,而是list_head范例变量的入手下手地点。)
经由过程如许一种完成体例创建的链表,节点都是经由过程list_head范例的变量相毗连的,那末我们怎样由list_head范例得指针失掉两头某个节点范例的指针呢?我们来看如许一个操纵:list_entry(p,t,m),个中t是链表的节点范例,m是节点内list_head范例的变量名,p是指向该变量的指针,该操纵用于从list_head指针失掉指向链表节点的指针。
334#definelist_entry(ptr,type,member)
335container_of(ptr,type,member)
650#definecontainer_of(ptr,type,member)({
651consttypeof(((type*)0)->member)*__mptr=(ptr);/*_mptr与ptr范例值都不异,是ptr的一个拷贝*/
652(type*)((char*)__mptr-offsetof(type,member));})/*地点减往偏移量(以字节为单元)便可*/
24#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE*)0)->MEMBER)/*盘算出变量在布局中的偏移量(以字节为单元)*/
</p>
Linux的常用命令find,察看man文档,初学者一定会觉得太复杂而不原意用,但是你一旦学会就爱不释手。 尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。 不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。 随着Linux技术的更加成熟、完善,其应用领域和市场份额继续快速增大。目前,其主要应用领域是服务器系统和嵌入式系统。然而,它的足迹已遍布各个行业,几乎无处不在。 尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助. 掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。 可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。? 我想即使Linux高手也很难快速准确精练的回答你。 请问谁有Linux的学习心得的吗?简单的说说?
页:
[1]