一、介紹
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教程有興趣的朋友有所幫助。