Nginx 소스 코드 분석 시리즈 4: Nginx 의 양 방향 링크

30 분 동안 산 책 을 보고 원 리 를 익 혔 다.
책 에 적 힌 코드 는 다음 과 같다.
typedef struct
{
   u_char* str;
   ngx_queue_t qEle;//    
   int num;
}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);
	return aNode->num > bNode->num;
/*
	#define ngx_queue_data(a, TestNode, qEle)                                         \
        (TestNode*) ((u_char *)a - offsetof(TestNode, qEle))
*/
}
void ngx_queue_test()
{
	int i=0;
	ngx_queue_t queueContainer;
	TestNode node[5];
	ngx_queue_init(&queueContainer);
	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);

	//    
	ngx_queue_t* q;
	for(q=ngx_queue_head(&queueContainer);
		q!=ngx_queue_sentinel(&queueContainer);
		q=ngx_queue_next(q))
	{
		TestNode* eleNode = ngx_queue_data(q,TestNode,qEle);
		printf("%d
",eleNode->num); } // ngx_queue_sort(&queueContainer,compTestNode); // for(q=ngx_queue_head(&queueContainer); q!=ngx_queue_sentinel(&queueContainer); q=ngx_queue_next(q)) { TestNode* eleNode = ngx_queue_data(q,TestNode,qEle); printf("%d
",eleNode->num); } }

사실 주요 사상 을 총괄 해 보면 다음 과 같은 몇 가지 가 있다.
1. 모든 데이터 구조 체, 안에 ngx 가 있어 야 합 니 다.queue_t 변수.
2 구조 체 의 유형, 구성원 의 이름, 구조 체 의 ngx 제공queue_t 변수의 포인터
제자리 구조 체 의 첫 주 소 를 돌려 줄 수 있 습 니 다.이거 C 배 운 거 다 알 아.
3. 양 방향 링크 에 연 결 된 것 은 각 구조 체 의 ngx 입 니 다.queue_t 변수.
4. 정렬 을 위해 정렬 함 수 를 써 야 합 니 다.
 
뒤 에는 말 하지 않 겠 습 니 다. 비교적 간단 한 것 은 스스로 깨 달 으 세 요, 젊은이 들!
머리 가 길 어서 이발 + 저녁 먹 으 러 가 야 하 는데 주말 에 새 가 없어 요.
PS: 이 연 결 된 링크 가 어떤 것 인지 계속 생각 했 어 요.
하하, 전봇대 에 줄 지어 있 는 새 처럼 느껴 졌 다. 새 한 마리 의 주 위 는 두 개의 날개 가 벌 어 졌 다.
이 말 을 알 아 봤 다 면 NGINX 의 양 방향 링크 의 참뜻 을 알 고 있 었 다 는 뜻 이다.
BIG CON!
 

좋은 웹페이지 즐겨찾기