2013年5月29日水曜日

ngx_array_tを使う

nginx moduleの開発をしていたときのメモ#1


nginx実装の配列ngx_array_tの使用例

使い方は、
  1. 配列の領域を確保する
    // ngx_str_t を10個保持する配列作成
    static void *
    ngx_sample_test(ngx_conf_t *cf) {
      ...
      ngx_array_t arr;
      if (ngx_array_init(&arr, cf->pool, 10, sizeof(ngx_str_t)) != NGX_OK) {
        return NULL;
      }
      ...
    

  2. 取り出して値を入れる
      // aにコピーして使う
      ngx_str_t *a;
      a = ngx_array_push(&arr);
      if (a == NULL) {
        return NULL;
      }
      ngx_memzero(a, sizeof(ngx_str_t));
      ngx_memcpy(a, コピー元, sizeof(ngx_str_t));
      ...
    

  3. 配列を回す
      // arr.eltsは配列のポインタ、arr.neltsは配列数を保持している
      // ngx_str_tを出力するときは %V を使う
      ngx_str_t *value;
      ngx_uint_t i;
      value = arr.elts;
      for (i=0; i<arr.nelts; i++) {
        ngx_conf_log_error(NGX_LOG_DEBUG, cf, 0, "arr[%d]=%V", i, &value[i]);
      }
      ...
    

と意外と普通であった(もっと小難しいかと思っていた)。



0 件のコメント:

コメントを投稿