日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx基本数据结构及接口

發(fā)布時間:2024/2/28 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx基本数据结构及接口 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡單的數(shù)據(jù)類型

在core/ngx_confing.h中定義了基本的數(shù)據(jù)類型的映射,大部分都映射到c語言自身的數(shù)據(jù)類型:

typedef intptr_t??????? ngx_int_t;

typedef uintptr_t?????? ngx_uint_t;

typedef intptr_t??????? ngx_flag_t;

其中ngx_int_t,ngx_flag_t都映射為intptr_t;ngx_uint_t映射為uintptr_t。

這兩個類型在/usr/include/stdint.h的定義為:


  • /*?Types?for?`void?*'?pointers.??*/??
  • #if?__WORDSIZE?==?64??
  • #?ifndef?__intptr_t_defined??
  • typedef?long?int????????????????intptr_t;??
  • #??define?__intptr_t_defined??
  • #?endif??
  • typedef?unsigned?long?int???????uintptr_t;??
  • #else??
  • #?ifndef?__intptr_t_defined??
  • typedef?int?????????????????????intptr_t;??
  • #??define?__intptr_t_defined??
  • #?endif??
  • typedef?unsigned?int????????????uintptr_t;??
  • #endif??

  • 看到這里大家應該理解,基本操作應該都是一樣的。

    ?

    字符串的數(shù)據(jù)類型

    nginx對c語言字符串類型進行了簡單的封裝,core/ngx_string.h/c里面包含了這些封裝的內(nèi)容。其中定義了

    ngx_str_t,

    ngx_keyval_t,

    ngx_variable_value_t

    這幾個基礎(chǔ)類型:

  • typedef?struct?{??
  • ????size_t??????len;??
  • ????u_char?????*data;??
  • }?ngx_str_t;??
  • ??
  • ??
  • typedef?struct?{??
  • ????ngx_str_t???key;??
  • ????ngx_str_t???value;??
  • }?ngx_keyval_t;??
  • ??
  • ??
  • typedef?struct?{??
  • ????unsigned????len:28;??
  • ??
  • ????unsigned????valid:1;??
  • ????unsigned????no_cacheable:1;??
  • ????unsigned????not_found:1;??
  • ????unsigned????escape:1;??
  • ??
  • ????u_char?????*data;??
  • }?ngx_variable_value_t;??

  • ngx_str_t 包含兩個屬性:len即長度, data為數(shù)據(jù);初始化使用ngx_string宏進行:

    #define ngx_string(str)???? {sizeof(str) -1,(u_chart*)str }

    ?

    該模塊在ngx_string.h和ngx_string.c中。字符串的操作一般包括:初始化,復制,格式化輸出,大小寫轉(zhuǎn)換,查找子字符,查找子字符串,字符串轉(zhuǎn)換成數(shù)字,字符串編碼類型相關(guān)函數(shù),字符串比較,trim,split等函數(shù)。在這個類中間沒有調(diào)用其他模塊的函數(shù),作為一個http服務器,還需要實現(xiàn)URL轉(zhuǎn)換,簡單的html轉(zhuǎn)換等函數(shù)。字符串的結(jié)構(gòu)體非常簡單實用,是非常值得剛?cè)腴T的linux開發(fā)工程師學習的。

    ?

    函數(shù)?????????????????????????????????????????????????????????????????????????????????????? 說明
    ngx_string????????????????????????????????????????????????????????????????????????????????????????初始化函數(shù)
    ngx_null_string????????????????????????????????????????????????????????????????????????????????初始化空字符串函數(shù)
    ngx_tolower?????????????????????????????????????????????????????????????????????????????????????字符轉(zhuǎn)小寫函數(shù)
    ngx_toupper?????????????????????????????????????????????????????????????????????????????????????字符轉(zhuǎn)大寫函數(shù)
    ngx_strncmp????????????????????????????????????????????????????????????????????????????????????比較指定長度的字符串是否相同
    ngx_strcmp??????????????????????????????????????????????????????????????????????????????????????比較字符串是否相同
    ngx_strstr?????????????????????????????????????????????????????????????????????????????????????????從字符串中找到需要的字符串
    ngx_strlen?????????????????????????????????????????????????????????????????????????????????????????字符串的長度
    ngx_strchr????????????????????????????????????????????????????????????????????????????????????????在字符串中找到匹配的字符,返回?0為匹配
    ngx_strlchr??????????????????????????????????????????????????????????????????????????????????????在字符串中找到匹配的字符,返回匹配的指針
    ngx_memzero??????????????????????????????????????????????????????????????????????????????????把一片內(nèi)存區(qū)設置為
    0
    ngx_memset?????????????????????????????????????????????????????????????????????????????????????
    把一片內(nèi)存區(qū)設置為指定的數(shù)
    ngx_memcpy???????????????????????????????????????????????????????????????????????????????????復制內(nèi)存,沒有返回
    ngx_cpymem???????????????????????????????????????????????????????????????????????????????????復制內(nèi)存,返回復制完了dst的最后一個字符的下一個字符的指針
    ngx_copy?????????????????????????????????????????????????????????????????????????????????????????
    ngx_cpymem
    ngx_memcmp??????????????????????????????????????????????????????????????????????????????????
    比較內(nèi)存中的數(shù)據(jù)是否相同
    ngx_strlow???????????????????????????????????????????????????????????????????????????????????????把字符串都轉(zhuǎn)換成小寫
    ngx_cpystrn?????????????????????????????????????????????????????????????????????????????????????復制字符串,并且返回字符串的最后一個字符的下一個字符的指針
    ngx_pstrdup?????????????????????????????????????????????????????????????????????????????????????復制字符串到pool,返回字符串的指針
    ngx_sprintf???????????????????????????????????????????????????????????????????????????????????????把各種類型的數(shù)據(jù)格式化輸出到buf,最大的長度為
    65536
    ngx_snprintf?????????????????????????????????????????????????????????????????????????????????????
    把各種類型的數(shù)據(jù)格式化輸出到指定長度的
    buf
    ngx_strcasecmp????????????????????????????????????????????????????????????????????????????????
    不分大小寫比較兩個字符串是否相同
    ngx_strncasecmp?????????????????????????????????????????????????????????????????????????????指定長短不分大小寫比較兩個字符串是否相同
    ngx_strnstr???????????????????????????????????????????????????????????????????????????????????????在指定大小一個字符串中是否有子字符串
    ngx_strstrn????????????????????????????????????????????????????????????????????????????????????? ?在一個字符串中是否有子指定大小的字符串
    ngx_strcasestrn????????????????????????????????????????????????????????????????????????????????在一個字符串中是否有子指定大小的字符串,不區(qū)分大小寫
    ngx_rstrncmp???????????????????????????????????????????????????????????????????????????????????從后往前比較兩個字符串是否相同,返回相同的位置
    ngx_rstrncasecmp????????????????????????????????????????????????????????????????????????????從后往前比較兩個字符串是否相同,返回相同的位置,不區(qū)分大小寫
    ngx_memn2cmp??????????????????????????????????????????????????????????????????????????????比較兩個指定長度的內(nèi)存是否相同,也比較長的內(nèi)存是否包含短的內(nèi)存
    ngx_atoi???????????????????????????????????????????????????????????????????????????????????????????指定長度的字符串轉(zhuǎn)換成數(shù)字
    ngx_atosz?????????????????????????????????????????????????????????????????????????????????????????指定長度的字符串轉(zhuǎn)換成ssize_t類型數(shù)字
    ngx_atoof?????????????????????????????????????????????????????????????????????????????????????????指定長度的字符串轉(zhuǎn)換成off_t類型數(shù)字
    ngx_atotm????????????????????????????????????????????????????????????????????????????????????????指定長度的字符串轉(zhuǎn)換成time_t類型數(shù)字

    ngx_hextoi????????????????????????????????????????????????????????????????????????????????????????指定長度的字符串轉(zhuǎn)換成十六進制數(shù)字
    ngx_hex_dump?????????????????????????????????????????????????????????????????????????????????把數(shù)字轉(zhuǎn)換成16進制的字符串
    ngx_encode_base64????????????????????????????????????????????????????????????????????????? base64編碼
    ngx_decode_base64??????????????????????????????????????????????????????????????????????????base64解碼
    ngx_utf8_decode???????????????????????????????????????????????????????????????????????????????utf8字符解碼成雙字節(jié)的?unicode或是單字節(jié)字符,但是該函數(shù)會移動*p的值,

    ?

    請注意

    ngx_utf8_length???????????????????????????得到utf8編碼的字符占幾個字節(jié)
    ngx_utf8_cpystrn??????????????????????? ?賦值utf8字符串,保證完整的復制
    ngx_escape_uri????????????????????????????uri進行編碼
    ngx_unescape_uri?????????????????????? ?uri的進行解碼
    ngx_escape_html?????????????????????????html進行編碼
    ngx_sort???????????????????????????????????????排序,主要是用于數(shù)組排序
    ngx_qsort?????????????????????????????????????快速排序
    ngx_value??????????????????????????????????? ?把宏數(shù)字轉(zhuǎn)換成字符串

    為了測試,我們可以用以下兩種方式打印出來
    1 ngx_str_t str ;
    2 printf (
    ?%* s
    ?, str . len , str . data );
    3 prinrf (
    %V, & str );

    總結(jié)

    以上是生活随笔為你收集整理的nginx基本数据结构及接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。