1. 소개
ngx_queue_t는 nginx에서 구현된 이중 연결 목록입니다. 이중 연결 목록을 사용하는 사용자 정의 구조에 ngx_queue_t를 삽입하면 됩니다. 또 다른 특징은 ngx_queue_t가 메모리 할당을 포함하지 않는다는 것입니다.
2. 예제
다음 소스코드는 "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 "nginx .h"
#include "ngx_core.h"
#include "ngx_string.h"
#include "ngx_palloc.h"
#include "ngx_queue.h"
휘발성 ngx_cycle_t *ngx_cycle;
void ngx_log_error_core(ngx_uint_t level,ngx_log_t *log, ngx_err_t err,
const char *fmt , ...)
{
}
typedef struct {
u_char*str;
ngx_queue_tqEle;
intnum;
}TestNode;
ngx_int_t compTestNode(const ngx_queue_t*a, const ngx_queue_t *b)
{
TestNode*aNode = ngx_queue_data(a, TestNode, qEle);
TestNode*bNode = ngx_queue_data(b, TestNode, qEle);
returnaNode->num > bNode->num;
}
int main()
{
ngx_queue_tqueueContainer;
ngx_queue_init(&queueContainer);
inti = 0;
TestNodenode[5];
for(; i < 5; ++ i) {
node[i].num= i;
}
ngx_queue_insert_tail(&queueContainer,&node[0].qEle); ngx_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_insert_tail(&queueContainer,&node[4] .qEle);
ueContainer);
q = ngx_queue_next(q)) {
TestNode*eleNode = ngx_queue_data(q, TestNode, qEle);
printf("%dn",eleNode->num);
);
for(q = ngx_queue_head(&queueContainer);
_next(q)) {
TestNode*eleNode = ng x_queue_data(q, 테스트노드, qEle );
printf("%dn",eleNode->num);
}
return0;}
MakefileCXX = gccCXXFLAGS += -g -Wall -WextraNGX_ROOT = /usr/src/nginx-1.0.4TARGETS = test_queueTARGETS_C_FILE = $(TARGETS).cCLEANUP = rm -f $(TARGETS) * .o모두: $(TARGETS)clean: $(CLEANUP)CORE_INCS = -I. - I$(NGX_ROOT)/src/core -I$(NGX_ROOT)/src/이벤트
-I$(NGX_ROOT)/src/event/modules
-I$(NGX_ROOT)/src/os/unix
-I$(NGX_ROOT)/objs
NGX_PALLOC =$(NGX_ROOT)/objs/src/core/ngx_palloc.o
NGX_STRING =$(NGX_ROOT)/objs/src/core/ngx_string.o
NGX_ALLOC = $ (NGX_ROOT)/objs/src/os/unix/ngx_alloc.o
NGX_QUEUE =$(NGX_ROOT)/objs/src/core/ngx_queue.o
$(대상): $( TARGETS_C_FILE)
$(CXX)$(CXXFLAGS) $(CORE_INCS) $(NGX_PALLOC) $(NGX_STRING) $(NGX_ALLOC) $(NGX_QUEUE)$^ -o $@
3. 요약
1. 연결리스트는 연결리스트의 선두로 식별되며 사용자가 정의한 관련 데이터를 포함하지 않습니다.
위 내용은 관련 내용을 포함하여 nginx 이중 연결 리스트 ngx_queue_t를 소개한 내용이므로 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.