PC6下载站

分类分类

nginx-1.0.4的容器源码分析—数组结构ngx_array_t

关注+2011-07-12作者:清晨

4 页 添加10个整型元素

 下图是向数组中添加10个整型元素后的一个例子。代码可参考下文的例子。当然,数组元素也不仅限于例子的整型数据,也可以是其他类型的数据,如结构体等。

 

3. 一个例子

 理解并掌握开源软件的最好方式莫过于自己写一些测试代码,或者改写软件本身,并进行调试来进一步理解开源软件的原理和设计方法。本节给出一个创建内存池并从中分配一个数组的简单例子。

 3.1代码

view plaincopy to clipboardprint?
  1. /** 
  2.  * ngx_array_t test, to test ngx_array_create, ngx_array_push 
  3.  */  
  4.   
  5. #include <stdio.h>   
  6. #include "ngx_config.h"   
  7. #include "ngx_conf_file.h"   
  8. #include "nginx.h"   
  9. #include "ngx_core.h"   
  10. #include "ngx_string.h"   
  11. #include "ngx_palloc.h"   
  12. #include "ngx_array.h"   
  13.   
  14. volatile ngx_cycle_t  *ngx_cycle;  
  15.   
  16. void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,  
  17.             const char *fmt, ...)  
  18. {  
  19. }  
  20.   
  21. void dump_pool(ngx_pool_t* pool)  
  22. {  
  23.     while (pool)  
  24.     {  
  25.         printf("pool = 0x%x\n", pool);  
  26.         printf("  .d\n");  
  27.         printf("    .last = 0x%x\n", pool->d.last);  
  28.         printf("    .end = 0x%x\n", pool->d.end);  
  29.         printf("    .next = 0x%x\n", pool->d.next);  
  30.         printf("    .failed = %d\n", pool->d.failed);  
  31.         printf("  .max = %d\n", pool->max);  
  32.         printf("  .current = 0x%x\n", pool->current);  
  33.         printf("  .chain = 0x%x\n", pool->chain);  
  34.         printf("  .large = 0x%x\n", pool->large);  
  35.         printf("  .cleanup = 0x%x\n", pool->cleanup);  
  36.         printf("  .log = 0x%x\n", pool->log);  
  37.         printf("available pool memory = %d\n\n", pool->d.end - pool->d.last);  
  38.         pool = pool->d.next;  
  39.     }  
  40. }  
  41.   
  42. void dump_array(ngx_array_t* a)  
  43. {  
  44.     if (a)  
  45.     {  
  46.         printf("array = 0x%x\n", a);  
  47.         printf("  .elts = 0x%x\n", a->elts);  
  48.         printf("  .nelts = %d\n", a->nelts);  
  49.         printf("  .size = %d\n", a->size);  
  50.         printf("  .nalloc = %d\n", a->nalloc);  
  51.         printf("  .pool = 0x%x\n", a->pool);  
  52.   
  53.         printf("elements: ");  
  54.         int *ptr = (int*)(a->elts);  
  55.         for (; ptr < (int*)(a->elts + a->nalloc * a->size); )  
  56.         {  
  57.             printf("0x%x  ", *ptr++);  
  58.         }  
  59.         printf("\n");  
  60.     }  
  61. }  
  62.   
  63. int main()  
  64. {  
  65.     ngx_pool_t *pool;  
  66.     int i;  
  67.   
  68.     printf("--------------------------------\n");  
  69.     printf("create a new pool:\n");  
  70.     printf("--------------------------------\n");  
  71.     pool = ngx_create_pool(1024, NULL);  
  72.     dump_pool(pool);  
  73.   
  74.     printf("--------------------------------\n");  
  75.     printf("alloc an array from the pool:\n");  
  76.     printf("--------------------------------\n");  
  77.     ngx_array_t *a = ngx_array_create(pool, 10, sizeof(int));  
  78.     dump_pool(pool);  
  79.   
  80.     for (i = 0; i < 10; i++)  
  81.     {  
  82.         int *ptr = ngx_array_push(a);  
  83.         *ptr = i + 1;  
  84.     }  
  85.   
  86.     dump_array(a);  
  87.   
  88.     ngx_array_destroy(a);  
  89.     ngx_destroy_pool(pool);  
  90.     return 0;  
  91. }  
展开全部

相关文章

更多+相同厂商

热门推荐

  • 最新排行
  • 最热排行
  • 评分最高
排行榜

    点击查看更多

      点击查看更多

        点击查看更多

        说两句网友评论

          我要评论...
          取消