1. Einführung
ngx_queue_t ist eine in nginx implementierte doppelt verknüpfte Liste. Betten Sie ngx_queue_t einfach in die benutzerdefinierte Struktur ein, in der Sie die doppelt verknüpfte Liste verwenden möchten. Ein weiteres Merkmal ist, dass ngx_queue_t keine Speicherzuweisung beinhaltet.
2. Beispiele
Der folgende Quellcode integriert den Quellcode zu ngx_queue_t in Kapitel 7 von „Detailliertes Verständnis von Nginx“. Makefile bezieht sich auf 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
{
}
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 = ngx_ queue_data(q, TestNode, 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
all: $(TARGETS)
clean:
$(CLEANUP)
CORE_INCS = -I.
- I$(NGX_ROOT)/src/core
-I$(NGX_ROOT)/src/event
-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): $( TARGETS_C_FILE)
$(CXX)$(CXXFLAGS) $(CORE_INCS) $(NGX_PALLOC) $(NGX_STRING) $(NGX_ALLOC) $(NGX_QUEUE)$^ -o $@
3. Zusammenfassung
1. Eine verknüpfte Liste wird durch den Kopf der verknüpften Liste identifiziert und enthält keine benutzerdefinierten zugehörigen Daten.
Das Obige stellt die doppelt verknüpfte Nginx-Liste ngx_queue_t vor, einschließlich des relevanten Inhalts. Ich hoffe, dass sie für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.