当前位置:K88软件开发文章中心网站服务器框架nginx → 文章内容

Nginx 基本数据结构

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 14:28:43

\ (x)->prev->next = x; \ (x)->next = h; \ (h)->prev = xngx_queue_insert_head() 和 ngx_queue_insert_after() 都是往头部添加节点,ngx_queue_insert_tail() 是往尾部添加节点。从代码可以看出哨兵节点的 prev 指向链表的尾数据节点,next 指向链表的头数据节点。另外 ngx_queue_head() 和 ngx_queue_last() 这两个宏分别可以得到头节点和尾节点。那假如现在有一个 ngx_queue_t *q 指向的是链表中的数据节点的 queue 成员,如何得到ngx_http_upstream_keepalive_cache_t 的数据呢? Nginx 提供了 ngx_queue_data() 宏来得到ngx_http_upstream_keepalive_cache_t 的指针,例如: ngx_http_upstream_keepalive_cache_t *cache = ngx_queue_data(q, ngx_http_upstream_keepalive_cache_t, queue);也许您已经可以猜到 ngx_queue_data 是通过地址相减来得到的: #define ngx_queue_data(q, type, link) \ (type *) ((u_char *) q - offsetof(type, link))另外 Nginx 也提供了 ngx_queue_remove()宏来从链表中删除一个数据节点,以及 ngx_queue_add() 用来将一个链表添加到另一个链表。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] 


Nginx 基本数据结构