首頁  >  文章  >  後端開發  >  nginx雙向鍊錶ngx_queue_t

nginx雙向鍊錶ngx_queue_t

WBOY
WBOY原創
2016-08-08 09:23:291188瀏覽

一、介紹

ngx_queue_t是nginx中實作的雙向鍊錶,在要用到雙向鍊錶的自訂結構體中將ngx_queue_t嵌入到自訂結構體中即可。還有一個特點是ngx_queue_t不涉及記憶體分配。

二、例子

下面的源碼是將《深入理解nginx》第7章關於ngx_queue_t的源碼整合起來。 Makefile則是參考http://blog.csdn.net/livelylittlefish/article/details/6586946。

#include

#include "ngx_config.h"

#include "ngx_conf_file.h"

#include "nginxh"

. ngx_string.h"

#include "ngx_palloc.h"

#include "ngx_queue.h"

volatile ngx_cycle_t _err_t err,

           const char *fmt , ...)

{

}

typedef struct {

       u_char*str;

   

}TestNode;

ngx_int_t compTestNode(const ngx_queue_t*a, const ngx_queue_t *b)

{

       TestNode*aNode = ngx_queue_data(a, TestNode, qEle);

    Node->num > bNode->num;

}

int main()

{

       ngx_queue_tqueueContainer;

       ngx_queue_init(&queueContainm);      TestNodenode[5];

      

       for(; i        }

      

       ngx_queue_insert_tail(quequeueContainer. x_queue_insert_head(&queueContainer,&node[1].qEle);

       ngx_queue_insert_tail(&queueContainer,&node[2 ].qEle);

       ngx_queue_insert_after(&queueContainer,&node[3].qEle);

         

       ngx_queue_t*q;

       for(q = ngx_queue_head(&queueContainer );

              q!= ngx_queue_sentinel(&queueContainer);

               TestNode*eleNode = ngx_queue_data(q, TestNode, qEle);

           );

       }

      

       printf("*****sort****n"); x_queue_sort(&queueContainer,compTestNode);

       for(q = ngx_queue_head(&queueContainer);

              q!= ngx_queue_sentinel(&queueContainer);

              TestNode*eleNode = ngx_queue_data(q, TestNode, qEle);

             

       }

             

      += -g -Wall -Wextra

NGX_ROOT = /usr/src/nginx-1.0.4

TARGETS = test_queue

TARGETS_C_FILE = $(TARGETS).c

CLEANUP = rm -f $(TARGETS) *.o

all: $(TARGETS)

clean:

all: $(TARGETS)

clean:

.

-I$(NGX_ROOT)/src/core

       -I$(NGX_ROOT)/src/event

       -I$(NGX_ROOT)/src/event/modules

       -I$(NGX_ROOT)/ (NGX_ROOT)/objs/src/ core/ngx_palloc.o

NGX_STRING =$(NGX_ROOT)/objs/src/core/ngx_string.o

NGX_ALLOC = $(NGX_ROOT)/ROjs/src/os/ROix/wUEUE_alloc.o )/objs/src/core/ngx_queue.o

$(TARGETS): $(TARGETS_C_FILE)

       $(CXX)$(CXXFLAGS) $(CORE_INCSALLX(CORE_INCSALL(XORE_NGPALL) $0NG_ NGX_QUEUE)$^ -o $@

三、總結

1、一個鍊錶頭標識,不包含用戶自訂的相關資料。

以上就介紹了nginx雙向鍊錶ngx_queue_t,包含了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:linux安裝nginx下一篇:linux安裝nginx