当前位置: 首页 > news >正文

网站做竞价对seo有影响吗东莞高端建站公司

网站做竞价对seo有影响吗,东莞高端建站公司,雷州网站建设,网站设计技巧内核链表 1 list_head 结构 为了使用链表机制#xff0c;驱动程序需要包含linux/types.h头文件#xff0c;该文件定义了如下结构体实现双向链#xff1a; struct list_head {struct list_head *next, *prev; };2 链表的初始化 2.1 链表宏定义和初始化 可使用以…内核链表 1 list_head 结构 为了使用链表机制驱动程序需要包含linux/types.h头文件该文件定义了如下结构体实现双向链 struct list_head {struct list_head *next, *prev; };2 链表的初始化 2.1 链表宏定义和初始化 可使用以下宏定义并初始化一个链表头部list_headlist_head 不包含数据部分。LIST_HEAD_INIT将链表头的 next 和 prev 指针都指向链表头部从而形成一个循环结构和下面介绍的INIT_LIST_HEAD函数一样。 #define LIST_HEAD_INIT(name) { (name), (name) }#define LIST_HEAD(name) \struct list_head name LIST_HEAD_INIT(name)2.2 链表的初始化 INIT_LIST_HEAD 是一个用于初始化链表头的函数它将链表头的 next 和 prev 指针都指向自己从而形成一个循环结构。 static inline void INIT_LIST_HEAD(struct list_head *list) {WRITE_ONCE(list-next, list);WRITE_ONCE(list-prev, list); }如下图所示链表头的 next 和 prev 指针都指向自己。 3 list_add 在链表的头部添加新链表项以下是实现 static inline void list_add(struct list_head *new, struct list_head *head) {__list_add(new, head, head-next); }static inline void __list_add(struct list_head *new,struct list_head *prev,struct list_head *next) {if (!__list_add_valid(new, prev, next))return;next-prev new;new-next next;new-prev prev;WRITE_ONCE(prev-next, new); }以下为添加示意图可以看出后添加节点放在链表的头部先添加节点靠后先进后出后进先出类似栈结构。 4 list_add_tail 在链表的尾部添加新链表项以下是实现 static inline void list_add_tail(struct list_head *new, struct list_head *head) {__list_add(new, head-prev, head); }static inline void __list_add(struct list_head *new,struct list_head *prev,struct list_head *next) {if (!__list_add_valid(new, prev, next))return;next-prev new;new-next next;new-prev prev;WRITE_ONCE(prev-next, new); }以下为添加示意图可以看出新添加节点放在链表的尾部后添加节点靠先进先出后进后出类似FIFO结构。 5 遍历节点 5.1 list_entry list_entry 宏通过调用 container_of 宏从链表节点指针获取包含该节点的结构体指针。 /*** list_entry - get the struct for this entry* ptr: 指向 struct list_head 的指针。* type: 包含该节点的结构体类型。* member: 结构体中的 list_struct 名称。*/ #define list_entry(ptr, type, member) \container_of(ptr, type, member)5.2 list_for_each list_for_each 从链表的头部往后依次遍历next方向。 /*** list_for_each - iterate over a list* pos: the struct list_head to use as a loop cursor.* head: the head for your list.*/ #define list_for_each(pos, head) \for (pos (head)-next; !list_is_head(pos, (head)); pos pos-next)5.3 list_for_each_entry 通过for循环依次遍历链表中的每个节点next方向遍历每个节点的宿主为pos。 /*** list_for_each_entry - iterate over list of given type* pos: the type * to use as a loop cursor.* head: the head for your list.* member: the name of the list_head within the struct.*/ #define list_for_each_entry(pos, head, member) \for (pos list_first_entry(head, typeof(*pos), member); \!list_entry_is_head(pos, head, member); \pos list_next_entry(pos, member))a. list_first_entry 宏: #define list_first_entry(ptr, type, member) \container_of((ptr)-next, type, member)list_first_entry 宏用于获取链表的第一个节点的结构体指针。通过 (ptr)-next 获取到链表头部之后的第一个节点的指针然后通过 container_of 宏获取包含该节点的整个结构体指针。 b. list_entry_is_head 宏: #define list_entry_is_head(pos, head, member) \((pos)-member (head))list_entry_is_head 宏用于检查当前节点是否是链表的头部。比较 pos-member 是否等于 head如果相等则说明当前节点是链表的头部即遍历结束。 c. list_next_entry 宏: #define list_next_entry(pos, member) \list_entry((pos)-member.next, typeof(*(pos)), member)list_next_entry 宏用于获取下一个节点的结构体指针。通过 (pos)-member.next 获取到当前节点的下一个节点的指针然后通过 list_entry 宏获取包含该节点的整个结构体指针。 5.4 list_for_each_prev 通过for循环依次遍历链表中的每个节点与list_for_each_entry不同的是list_for_each_prev按照pre方向遍历每个节点的宿主为pos。 /*** list_for_each_prev - iterate over a list backwards* pos: the struct list_head to use as a loop cursor.* head: the head for your list.*/ #define list_for_each_prev(pos, head) \for (pos (head)-prev; !list_is_head(pos, (head)); pos pos-prev)5.5 删除链表 list_del 删除列表中的给定项 /*** list_del - deletes entry from list.* entry: the element to delete from the list.* Note: list_empty() on entry does not return true after this, the entry is* in an undefined state.*/ static inline void list_del(struct list_head *entry) {__list_del_entry(entry);entry-next LIST_POISON1;entry-prev LIST_POISON2; }list_del_init 删除列表中的给定项如果删除后的链表可能被插入新的链表中应该使用list_del_init它会初始化链表的指针。 /*** list_del_init - deletes entry from list and reinitialize it.* entry: the element to delete from the list.*/ static inline void list_del_init(struct list_head *entry) {__list_del_entry(entry);INIT_LIST_HEAD(entry); }
http://www.hkea.cn/news/14451433/

相关文章:

  • 唐山网站建设互众动力营销型网站开发公司
  • 网站开发的功能需求和模块划分项目网络图和关键路径
  • 淮安做网站卓越凯欣wordpress 哪个好用
  • 济南网站建设排名引迈快速开发平台
  • 龙岗网站建设 公司推广金泉网做的山东黄锈石网站有哪些
  • 网站做好了如何发布北京seo网站管理
  • 长春网长春关键词排名站设计商务网站推广技巧包括什么
  • 照片做视频ppt模板下载网站好南京网站制作哪家好
  • 嘉兴网站专业做网站涉及个人隐私
  • jsp企业网站分公司注册流程网上注册
  • 如何用自己网站做大电商wordpress写的网站
  • 南京建设网站首页sketch做网站
  • 网站联盟营销模板网站代理
  • 淮安哪个做网站好点二手车网站模板建设
  • 江苏靖江苏源建设有限公司网站浙江省住房与城乡建设部网站
  • 美容院网站源码天猫网站平面广告
  • 旅游网站前台模板哈尔滨网站建设方案
  • 学校网站建设xmlwordpress 数据库解析
  • 百度推广网站可以链接到同公司另一个网站吗html用什么软件打开
  • 唯品会网站建设特色海口制作网站
  • 网站开发项目扶持政策有哪些做公益网站的目的
  • 怎么做logo网站百度手机卫士下载安装
  • 天门网站建设wordpress换模板
  • 免费的网站域名查询app国美电器网上商城
  • 为什么做网站都用php网上虚拟银行注册网站
  • 受欢迎的汕头网站推广腾讯企点聊天记录老板能看到吗
  • 商业网站开发实训内容短网站生成
  • 淘宝优惠券发布网站怎么做上海开发网站
  • 企业站官方网站张掖市住房和城乡建设局网站
  • 网站如何留住用户手机网络不稳定怎么解决