本节我们讲述一下ngx_buf.c源文件,其主要是定义了nginx buf相关操作的实现。
1. 函数ngx_create_temp_buf()
本函数用于创建一个temporary类型的nginx buf内存,这意味着其中的内容可以被后续filter所更改。
2. 函数ngx_alloc_chain_link
如果pool池中仍有空闲的ngx_chain_t链结构,则从池中获取;否则重新分配一个(注意这里仅仅是获得一个ngx_chain_t的链接)
3. 函数ngx_create_chain_of_bufs()
本函数用于创建bufs->num数量的temporary buf,并且每个buf的大小为bufs->size; 然后将这些buf连接起来形成buf链。
4. 函数ngx_chain_add_copy()
将in链中的数据拷贝到chain链中。
5. 函数ngx_chain_get_free_buf()
从free链中获取一个空闲的ngx_chain_t链,如果没有剩余的空闲链,则分配一个。
6. 函数ngx_chain_update_chains()
函数首先将out
链中的数据复制到busy链中,然后循环处理busy链中的每一个节点:
7. 函数ngx_chain_coalesce_file()
合并in链中与第一个节点相邻的文件buf,并且合并长度限制在limit范围你。
说明: 其实本函数是有缺陷的,因为函数会改变参数in所指向的节点,而在函数返回后又不能确切的知道最后合并到哪一个位置。
本函数在当前ngx_linux_sendfile_chain.c文件中调用暂无问题。
8. 函数ngx_chain_update_sent()
这里根据已成功发送数据的大小sent
更新in链,并返回下一次需要处理的节点。
[参看]:
- ngx_output_chain 函数分析