|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
看不懂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文档,初学者一定会觉得太复杂而不原意用,但是你一旦学会就爱不释手。 |
|