>  기사  >  백엔드 개발  >  nginx 이중 연결 리스트 ngx_queue_t

nginx 이중 연결 리스트 ngx_queue_t

WBOY
WBOY원래의
2016-08-08 09:23:291246검색

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;

}

Makefile

CXX = gcc

CXXFLAGS += -g -Wall -Wextra

NGX_ROOT = /usr/src/nginx-1.0.4

TARGETS = test_queue

TARGETS_C_FILE = $(TARGETS).c

CLEANUP = 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 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:리눅스 설치 nginx다음 기사:리눅스 설치 nginx