1. はじめに
ngx_queue_t は nginx で実装された二重リンクリストです。二重リンクリストを使用したいカスタム構造に ngx_queue_t を埋め込むだけです。もう 1 つの特徴は、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"
volatile 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 {
ngx_int_ t compTestNode(const ngx_queue_t*a, const ngx_queue_t *b )
{
use using ngx_queue_data(a 、TestNode、qEle)- ; - > num;
}
intmain()
{
ngx_que_tqueuecontainer; (&queueContainer,&node[1].qEle);
ngx_queue_insert_tail( &queueContainer,&node[2].qEle);
ngx_queue_insert_after(&queueContainer,&node[3].qEle);
&キューコンテナ,&ノード[4]。 qEle);
ngx_queue_t*q;
for( q = ngx_queue_head(&queueContainer); TestNode*eleNode = ngx_queue_data(q, TestNode, qEle);
printf("%dn" ,eleNode-> ;数字) ; for(q = ngx_queue_head(&queuecontainer);*elenode = ngx_queue_data(q、testnode、qele); /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
G -i $ (ngx_root)/src/event/modules -i $ (ngx_root)/src/OS/UNIX -I $ (ngx_root)/objsngx_palloc = $ (ngx_root)/objs/src/ src/core/ngx_palloc.oNGX_STRING =$(NGX_ROOT)/objs/src/core/ngx_string.oNGX_ALLOC = $(NGX_ROOT)/objs/src/os/unix/ngx_alloc.oNGX_QUEUE =$ (NGX_ROOT )/objs/src/core/ngx_queue.o$(TARGETS): $(TARGETS_C_FILE) NGX_QUEUE)$^ -o $@3. 概要1.リンクされたリストのヘッダーであり、ユーザー定義の関連データは含まれません。上記では、nginx の二重リンク リスト ngx_queue_t を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。