兰色精灵 发表于 2015-1-16 12:52:18

给大家带来浅析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文档,初学者一定会觉得太复杂而不原意用,但是你一旦学会就爱不释手。

莫相离 发表于 2015-1-18 09:58:42

尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。

精灵巫婆 发表于 2015-1-23 19:31:25

不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。

小女巫 发表于 2015-2-7 00:46:26

随着Linux技术的更加成熟、完善,其应用领域和市场份额继续快速增大。目前,其主要应用领域是服务器系统和嵌入式系统。然而,它的足迹已遍布各个行业,几乎无处不在。

金色的骷髅 发表于 2015-2-19 08:50:08

尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助.

柔情似水 发表于 2015-3-6 14:35:18

掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。

灵魂腐蚀 发表于 2015-3-13 03:10:32

可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。?

分手快乐 发表于 2015-3-13 03:10:32

我想即使Linux高手也很难快速准确精练的回答你。

若天明 发表于 2015-3-20 11:38:18

请问谁有Linux的学习心得的吗?简单的说说?
页: [1]
查看完整版本: 给大家带来浅析Linux内核中的轮回链表布局