ngx_save_Argvメソッドの詳細
1906 ワード
ngx_save_argv法はsrc/core/nginxである.cで定義され、init_へのパラメータのバックアップに使用されます.cycleで.
この関数の主な役割は、パラメータの個数とパラメータの情報をngx_にバックアップすることです.Argcとngx_argv変数では、この2つの変数はsrc/os/unix/ngx_process.cで定義されています.
次の関数の詳細コードを示します.
ここでngx_allocメソッドは、最下位オペレーティングシステムのメモリ割り当てメソッドmalloc()のパッケージです.
この関数の主な役割は、パラメータの個数とパラメータの情報をngx_にバックアップすることです.Argcとngx_argv変数では、この2つの変数はsrc/os/unix/ngx_process.cで定義されています.
int ngx_argc;
char **ngx_argv;
char **ngx_os_argv;
次の関数の詳細コードを示します.
static ngx_int_t
ngx_save_argv(ngx_cycle_t *cycle, int argc, char *const *argv)
{
#if (NGX_FREEBSD)
ngx_os_argv = (char **) argv;
ngx_argc = argc;
ngx_argv = (char **) argv;
#else
size_t len;
ngx_int_t i;
ngx_os_argv = (char **) argv;
ngx_argc = argc;
ngx_argv = ngx_alloc((argc + 1) * sizeof(char *), cycle->log);
if (ngx_argv == NULL) {
return NGX_ERROR;
}
for (i = 0; i < argc; i++) {
len = ngx_strlen(argv[i]) + 1;
ngx_argv[i] = ngx_alloc(len, cycle->log);
if (ngx_argv[i] == NULL) {
return NGX_ERROR;
}
(void) ngx_cpystrn((u_char *) ngx_argv[i], (u_char *) argv[i], len);
}
ngx_argv[i] = NULL;
#endif
ngx_os_environ = environ;
return NGX_OK;
}
ここでngx_allocメソッドは、最下位オペレーティングシステムのメモリ割り当てメソッドmalloc()のパッケージです.
void *
ngx_alloc(size_t size, ngx_log_t *log)
{
void *p;
// ,ngx_alloc malloc 。
p = malloc(size);
if (p == NULL) {
ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
"malloc(%uz) failed", size);
}
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, log, 0, "malloc: %p:%uz", p, size);
return p;
}