> 백엔드 개발 > PHP 튜토리얼 > nginx 소스 코드 연구 노트(11) - 기본 컨테이너 - ngx_list

nginx 소스 코드 연구 노트(11) - 기본 컨테이너 - ngx_list

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-07-29 09:10:55
원래의
790명이 탐색했습니다.

ngx_list.{c|h} 구조는 매우 간단합니다. 배열에 대한 이전 소개를 읽었다면 다음 섹션을 건너뛰어도 됩니다.

[cpp] 보기 일반 카피프린트?

  1. typedef struct ngx_list_part_s ngx_list_part_t;
  2. struct
  3. ngx_list_part_s {
  4. void
  5. *elts; //데이터 영역 포인터 ngx_uint_t nelts
  6. //실제 데이터 개수
  7. ngx_list_part_t *next
  8. //다음 데이터 포인터
  9. };
  10. typedef
  11. struct { ngx_list_part_t * last; 🎜>
  12. ngx_list_part_t 부분; _t
  13. size;
  14. //단일 데이터 크기
  15.         //기본 데이터 개수
  16. ngx_pool_t *pool //속해 있는 메모리 풀 } ngx_list_t; 일반 카피프린트?
    1. //목록 생성
    2. ngx_list_t * >ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t
    3. 사이즈) {
    4. ngx_list_t *list
    5. list = ngx_palloc(pool, sizeof
    6. (ngx_list_t)) 🎜> if (목록 == NULL) {
    7. 반환 NULL
    8. } list->part.elts = ngx_palloc(pool, n * size) > (list->part.elts == NULL) {
    9. 반환 NULL
    10. list->part.nelts = 0;  //실제 데이터 개수는 0개입니다
    11. list-> ;part.next = NULL; list->last = &list->part > // 각 데이터의 크기 초기화
    12. list- & gt; nalloc = n
    13. // 사전 설정된 데이터 양
    14. list->pool
    15. return list; >
    16. //여기서 배열을 만드는 것과 유사하다고 판단되면 시작한 것입니다. 시작하세요
    17. }
    18. //데이터 추가 기본적으로 배열을 추가하는 것과 동일하다고 볼 수 있으며 추가할 데이터의 주소도 반환한 후 연산을 수행합니다.
    19. void *
    20. ngx_list_push(ngx_list_t *l) >{
    21.                                                                                         마지막;
    22. 마지막 = l->마지막
    23. if
    24. (last->nelts == l ->nalloc) {
    25. /* the 마지막 부분이 꽉 찼습니다. 새 목록 부분을 할당하세요. */
    26. last = ngx_palloc(l->pool,
    27. sizeof
    28. (ngx_list_part_t));
    29. if
    30. (last == NULL) {  
    31. 반환
    32. NULL, }                                             >
    33. 만약
    34. (last->elts == NULL) {  
    35. return
    36. NULL >
    37. last; ->next = NULL
    38. l->last->next = 마지막
    39. l->last = 마지막; ;
    40. }
    41. elt = (문자 *) 마지막 ->elts + l-> ;size * last->nelts
    42. last->nelts++
    43. return elt; >
    44. } 🎜>[cpp] 보기 일반 카피프린트?
    45. //리스트 순회 방법
    46. part = &list.part ;
    47. data = part->elts > (i = 0 ;; i++) {
    48. (i >= 부분->nelts) {
    49. if
    50. (part->next == NULL) { 

     

    break

    ;
    1.                           🎜>
    2. 부분 = 부분->다음
    3. 데이터 = 부분- >elts;
    4. i=0;
    5. } i] ...
    6. }
    7. 위 내용은 nginx 소스코드 연구 노트(11) - 기본 컨테이너 - ngx_list 관련 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.

관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿