Lighttpd 핵심 구조 분석
1: buffer (문자열 함수)
내부 정 의 는 다음 과 같 습 니 다.
이 구조 에서 파생 된 2 차원 문자열 배열 구조
typedef struct {
char *ptr; //
size_t used;//
size_t size;//
} buffer;
1.1 버퍼 메모리 초기 화 특징
이미 존재 하 는 BUFFER 를 사용 하여 현재 BUFFER 를 초기 화 할 때, 조 치 를 취해 분 배 된 메모 리 는 모두 64 의 정수 배 입 니 다.
typedef struct {
buffer **ptr;
size_t used;
size_t size;
} buffer_array;
2: dataset 형식 (대상 템 플 릿, 유 니 버 설 구조)
/**
*
* allocate (if neccessary) enough space for 'size' bytes and
* set the 'used' counter to 0
*
*/
#define BUFFER_PIECE_SIZE 64
int buffer_prepare_copy(buffer *b, size_t size) {
if (!b) return -1;
if ((0 == b->size) ||
(size > b->size)) {
if (b->size) free(b->ptr);
b->size = size;
/* always allocate a multiply of BUFFER_PIECE_SIZE */
b->size += BUFFER_PIECE_SIZE - (b->size % BUFFER_PIECE_SIZE);// PIECE
b->ptr = malloc(b->size);
assert(b->ptr);
}
b->used = 0;
}
/*data_unset 실제 유형 은 함수 와 유사 합 니 다.
typedef enum { TYPE_UNSET, TYPE_STRING, TYPE_COUNT, TYPE_ARRAY, TYPE_INTEGER, TYPE_FASTCGI, TYPE_CONFIG } data_type_t;
#define DATA_UNSET \
data_type_t type; \
buffer *key; \
int is_index_key; /* 1 if key is a array index (autogenerated keys) */ \
struct data_unset *(*copy)(const struct data_unset *src); \
void (* free)(struct data_unset *p); \
void (* reset)(struct data_unset *p); \
int (*insert_dup)(struct data_unset *dst, struct data_unset *src); \
void (*print)(const struct data_unset *p, int depth)
typedef struct data_unset {
DATA_UNSET;
} data_unset;
data_unset 는 성형, 문자 직렬 및 기타 유형 일 수 있 지만 함수 지침 을 통 해 몇 개의 함수 free 로 정 합 니 다.
reset, print 등등.data 에 해당unset 는 가상 기본 클래스 입 니 다.
3: array (실제 data2 차원 구조
array 는 다음 과 같이 정 해 졌 습 니 다.
typedef struct data_unset
{
data_type_t type;
buffer * key;
int is_index_key;
struct data_unset *(*copy)(const struct data_unset *src);
void (* free)(struct data_unset *p);
void (* reset)(struct data_unset *p);
int (*insert_dup)(struct data_unset *dst, struct data_unset *src); \
void (*print)(const struct data_unset *p, int depth)
}
*/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.