Nginx源码完全注释(3)ngx_list.h / ngx_list.c
列表头文件ngx_list.h
#ifndef _NGX_LIST_H_INCLUDED_
#define _NGX_LIST_H_INCLUDED_
#include <ngx_config.h>
#include <ngx_core.h>
typedef struct ngx_list_part_s ngx_list_part_t;
struct ngx_list_part_s {
void *elts;
ngx_uint_t nelts;
ngx_list_part_t *next;
};
typedef struct {
ngx_list_part_t *last;
ngx_list_part_t part;
size_t size;
ngx_uint_t nalloc;
ngx_pool_t *pool;
} ngx_list_t;
ngx_list_t *ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size);
static ngx_inline ngx_int_t
ngx_list_init(ngx_list_t *list, ngx_pool_t *pool, ngx_uint_t n, size_t size)
{
list->part.elts = ngx_palloc(pool, n * size);
if (list->part.elts == NULL) {
return NGX_ERROR;
}
list->part.nelts = 0;
list->part.next = NULL;
list->last = &list->part;
list->size = size;
list->nalloc = n;
list->pool = pool;
return NGX_OK;
}
void *ngx_list_push(ngx_list_t *list);
#endif /* _NGX_LIST_H_INCLUDED_ */
列表源文件ngx_list.c
#include <ngx_config.h>
#include <ngx_core.h>
ngx_list_t *
ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size)
{
ngx_list_t *list;
list = ngx_palloc(pool, sizeof(ngx_list_t));
if (list == NULL) {
return NULL;
}
list->part.elts = ngx_palloc(pool, n * size);
if (list->part.elts == NULL) {
return NULL;
}
list->part.nelts = 0;
list->part.next = NULL;
list->last = &list->part;
list->size = size;
list->nalloc = n;
list->pool = pool;
return list;
}
void *
ngx_list_push(ngx_list_t *l)
{
void *elt;
ngx_list_part_t *last;
last = l->last;
if (last->nelts == l->nalloc) {
last = ngx_palloc(l->pool, sizeof(ngx_list_part_t));
if (last == NULL) {
return NULL;
}
last->elts = ngx_palloc(l->pool, l->nalloc * l->size);
if (last->elts == NULL) {
return NULL;
}
last->nelts = 0;
last->next = NULL;
l->last->next = last;
l->last = last;
}
elt = (char *) last->elts + l->size * last->nelts;
last->nelts++;
return elt;
}
从上面可以看出,create 是从 pool 分配定义 list 结构的内存,分配表头节点的内存。init 是初始化已有的 list。
Reference
- http://blog.csdn.net/v_july_v/article/details/7040425
- http://www.cnblogs.com/sld666666/archive/2010/06/27/1766255.html
- http://www.cnblogs.com/jzhlin/archive/2012/06/05/Nginx_pool.html
- http://code.google.com/p/nginxsrp/wiki/NginxCodeReview#ngx的内存池
-
转载请注明来自柳大Poechant(钟超Michael)的CSDN博客:
钟超Michael的博客:Blog.CSDN.net/Poechant
钟超Michael的微博:钟超Michael的新浪微博
-
分享到:
相关推荐
ngx_sqlite 是嵌入 sqlite 数据库的 nginx 模块。通过强大的nginx server,可以使用http协议访问sqlite数据库。环境- sqlite 3- nginx-1.6.3 安装```sh $ git clone https://github.com/rryqszq4/ngx_sqlite.git...
nginx-1.18.0-2.el7.ngx.x86_64.rpm安装包(含有部署手册) nginx-1.18.0-2.el7.ngx.x86_64.rpm安装包(含有部署手册) nginx-1.18.0-2.el7.ngx.x86_64.rpm安装包(含有部署手册) nginx-1.18.0-2.el7.ngx.x86_64.rpm...
nginx1.20.2
./configure --add-module=../ngx_cache_purge-2.4.2 ``` 4. 编译并安装Nginx,这将同时编译ngx_cache_purge模块。 5. 在Nginx的配置文件中启用该模块,并设置相应的清理规则,如: ``` http { cache_path /...
ngx_http_dav_ext_module.so centos7 nginx 1.18 可以作为模块加载
ngx_php功能是为nginx模块嵌入php脚本语言。别名为php-nginx-module。 特性 * 支持加载php.ini配置文件 * 支持原生php的全局变量$_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, $_SESSION... * 支持运行php代码...
3. 编译和安装:运行`./configure`,然后`make`和`make install`以编译并安装带有新模块的Nginx。 4. 配置Nginx服务器块:在Nginx的配置文件(如nginx.conf)中,为需要启用代理服务的域或端口定义一个新的服务器块...
ngx_devel_kit(通常缩写为 NDK)是一个针对Nginx的模块开发工具集,它为构建自定义Nginx模块提供了便利。在Nginx生态系统中,NDK是一个重要的扩展工具,允许开发者利用C语言直接操作Nginx的内部结构,以实现更高级...
ngx_python 是为 nginx 嵌入 python 脚本的模块。环境- python 2.7.*- nginx-1.6.3 安装```sh git clone https://github.com/rryqszq4/ngx_python.git wget 'http://nginx.org/download/nginx-1.6.3.tar.gz' ...
3. **负载均衡**:如果需要处理大量并发流,可以考虑设置 Nginx 负载均衡,将流分发到多个服务器。 4. **资源管理**:合理配置内存和 CPU 使用限制,避免服务器过载。 5. **备份与恢复**:定期备份配置文件和录制的...
2022年5月30日 官方当前最新稳定版本nginx 二进制rpm包 适用于x86架构centos7 rhel7版本操作系统升级安装nginx 该包开启了ipv6支持,添加了nginx-rtmp模块支持
nginx-1.22.1-1.sles12.ngx.x86_64.rpm文件 nginx-1.22.1-1.sles12.ngx.x86_64.rpm文件 nginx-1.22.1-1.sles12.ngx.x86_64.rpm文件 nginx-1.22.1-1.sles12.ngx.x86_64.rpm文件 nginx-1.22.1-1.sles12.ngx.x86_64.rpm...
nginx-1.20.0-1.el7.ngx.x86_64
ngx_cache_purge 是 nginx 模块,此模块可以清理 nginx 的 FastCGI、proxy、 SCGI 和 uWSGI 的缓存。配置指令(相同位置语法)fastcgi_cache_purgesyntax: fastcgi_cache_purge on|off|<method> [from all|<ip> [.....
4. 使用Nginx的configure脚本,通过指定--add-module选项添加NDK模块,例如:`./configure --add-module=路径/ngx_devel_kit-0.2.19`。 5. 编译并安装Nginx:`make && make install`。 6. 更新Nginx配置文件,启用...
很难找的 centos7 nginx-1.6.2-1.el7.centos.ngx.x86_64.rpm 包
nginx rpm package for centos7 nginx rpm package for centos7 nginx rpm package for centos7 nginx rpm package for centos7 nginx rpm package for centos7 nginx rpm package for centos7 nginx rpm package ...
3. 然后,你可以使用 `rpm` 命令安装 Nginx,运行:`sudo rpm -ivh nginx-1.18.0-1.el7.ngx.x86_64.rpm`。这里的 `-i` 表示安装,`-v` 用于显示详细信息,`-h` 是在安装过程中显示进度条。 4. 安装完成后,Nginx ...
./configure --add-module=path/to/nginx_mod_h264_streaming make sudo make install ``` 3. 配置Nginx - 在Nginx的配置文件(如/etc/nginx/nginx.conf)中,添加流媒体服务器的相关配置。例如,创建一个新的...
我们将详细解释Nginx模块的工作原理、开发流程以及如何利用提供的“ngx_http_mytest_module.c”源代码学习和理解Nginx模块开发。 首先,了解Nginx的基本架构至关重要。Nginx是一款高性能的Web服务器,以其反向代理...