青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

西城

指尖代碼,手上年華

聯(lián)系 聚合 管理
  20 Posts :: 0 Stories :: 62 Comments :: 0 Trackbacks
Cgicc類(lèi)是主類(lèi)。
首先是一些常用的typedef

//! A vector of FormEntry objects
typedef STDNS vector<FormEntry>::iterator form_iterator;
//! A vector of \c const FormEntry objects
typedef STDNS vector<FormEntry>::const_iterator const_form_iterator;

//! A vector of FormFile objects
typedef STDNS vector<FormFile>::iterator file_iterator;
//! A vector of \c const FormFile objects
typedef STDNS vector<FormFile>::const_iterator const_file_iterator;

cigcc里面很多地方用到了STL的vector.STDNS就就是std::,因?yàn)檎麄€(gè)文件的定義是在namespace cgicc里面,所以此處要聲明std.。網(wǎng)頁(yè)文件的元素很適合用vector來(lái)標(biāo)示,迭代器也是直接使用vector的。
cgicc主要是用來(lái)存取form的元素信息的。
cigcc通常的用法是:

int
main(int argc, char **argv) {
try {
cgicc::Cgicc cgi;
// do something with cgi
}

catch(const exception& e) {
//handle the error
}
}


類(lèi)的定義相關(guān),簡(jiǎn)單的成員函數(shù)不再介紹,只在后面介紹具體的重要的成員函數(shù)。下面是類(lèi)的私有數(shù)據(jù)與函數(shù):
private:
CgiEnvironment fEnvironment;
STDNS vector<FormEntry> fFormData;
STDNS vector<FormFile> fFormFiles;

// Convert query string into a list of FormEntries
void parseFormInput(const STDNS string& data);
// Parse a multipart/form-data header
MultipartHeader parseHeader(const STDNS string& data);
// Parse a (name=value) form entry
void parsePair(const STDNS string& data);
// Parse a MIME entry for ENCTYPE=""
void parseMIME(const STDNS string& data);
// Find elements in the list of entries
bool findEntries(const STDNS string& param,
bool byName,STDNS vector<FormEntry>& result) const;
};
構(gòu)造函數(shù)

Cgicc(reader_function_t stream_reader = NULL);

如果使用的是FastCGI(CGI的一個(gè)擴(kuò)展版本)的話,會(huì)需要一個(gè)reader_function_t的參數(shù),用來(lái)讀取輸入。如果忽略或者是NULL的話,
則使用標(biāo)準(zhǔn)輸入
read_function_t也是一個(gè)typedef .定義在CgiEnvironment.h中

typedef size_t (* reader_function_t)(void *, size_t);

是一種函數(shù)指針類(lèi)型。size_t 是Linux上常用的一種數(shù)據(jù)類(lèi)型。一般為long unsigned int.這種函數(shù)類(lèi)型接受兩個(gè)參數(shù),返回一個(gè)size_t.
實(shí)現(xiàn):

CGICCNS Cgicc::Cgicc(reader_function_t stream_reader) //CGICCNS--->cgicc::
: fEnvironment(stream_reader) //fEnvironment是一個(gè)CgiEnvironment 實(shí)例。
{
#if DEBUG
#if HAVE_STRFTIME //是否有strftime這個(gè)函數(shù),有的話就會(huì)有下面的調(diào)用。LINUX上一般都有。
time_t now;
tm *date;
char s[80];
now = time(0); //獲取UNIX時(shí)間(秒數(shù))。
date = localtime(&now); //轉(zhuǎn)換成通常用的時(shí)間格式
strftime(s, 80, "%A, %B %d, %Y %I:%M:%S %p", date); //寫(xiě)入字符數(shù)組s中
LOG("Cgicc debugging log started on ") //LOG和下面的stringsAreEqual都是Cgiutils.h中定義的一些實(shí)用函數(shù),見(jiàn)本文
LOGLN(s) //附錄。
#else
LOGLN("Cgicc debugging log started.")
#endif /* HAVE_STRFTIME */
#endif /* DEBUG */

// this can be tweaked for performance
fFormData.reserve(40); //請(qǐng)求存儲(chǔ)空間,最少能容納40個(gè)元素,STL中的接口
fFormFiles.reserve(5); //同上。Cgicc提供了整個(gè)庫(kù)最主要的也是最基本的接口,其中就包括存貯取得的信息。

if(stringsAreEqual(getEnvironment().getRequestMethod(), "post")) //具體函數(shù)見(jiàn)附錄2.
parseFormInput(getEnvironment().getPostData());
else
parseFormInput(getEnvironment().getQueryString());
}

析構(gòu)函數(shù):

1 CGICCNS Cgicc::~Cgicc()
2 {
3   LOGLN("Cleaning up")
4   LOGLN("Cgicc debugging log closed.")
5 }

同構(gòu)造函數(shù)一樣,若開(kāi)啟DEBUG宏,輸出一些提示信息。否則什么也不做。

附錄:
1.LOG。一個(gè)宏,牽扯到DEBUG這個(gè)宏,默認(rèn)情況下DEBUG為0,此時(shí)LOG(S)和LOGIN(S)都為空。若DEBUG=1,則定義為:

extern STDNS ofstream gLogFile;
#define LOGLN(s) gLogFile << s << STDNS endl;
#define LOG(s) gLogFile << s;

所以此時(shí)上面的構(gòu)造函數(shù)的輸出為(標(biāo)準(zhǔn)輸出):Cgicc debugging log started on\n+一個(gè)時(shí)間
2.stringsAreEqual比較兩個(gè)字符串是否相等,忽視大小寫(xiě)。

bool
CGICCNS stringsAreEqual(const STDNS string& s1, //CGICCNS------>cgicc:: STDNS----->std::
const STDNS string& s2)
{
STDNS string::const_iterator p1 = s1.begin();
STDNS string::const_iterator p2 = s2.begin();
STDNS string::const_iterator l1 = s1.end();
STDNS string::const_iterator l2 = s2.end();

while(p1 != l1 && p2 != l2) {
if(toupper(*(p1++)) != toupper(*(p2++))) //忽略大小寫(xiě)
return false;
}

return (s2.size() == s1.size()) ? true : false;
}

posted on 2012-03-24 23:16 西城 閱讀(2032) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): Cgicc

Feedback

# re: Cgicc源碼分析:cgicc.h/cigcc.cpp 2012-03-25 09:49 tb
很不錯(cuò)的   回復(fù)  更多評(píng)論
  


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产精品久久久| 欧美sm重口味系列视频在线观看| 欧美激情按摩| 欧美高清在线一区| 欧美国产日韩xxxxx| 欧美区视频在线观看| 欧美日韩精品免费观看视一区二区 | 最新国产の精品合集bt伙计| 噜噜噜躁狠狠躁狠狠精品视频 | 亚洲福利视频网站| 亚洲精品欧洲精品| 亚洲欧美日韩中文播放| 久久久久久9| 亚洲福利视频专区| 一区二区三区视频观看| 久久九九免费视频| 欧美日韩视频在线观看一区二区三区| 国产精品国产精品| 亚洲电影免费在线观看| 亚洲一区二区三区久久| 玖玖精品视频| 亚洲视频福利| 久色婷婷小香蕉久久| 国产精品激情电影| 亚洲激情视频在线| 久久精品国产精品亚洲精品| 亚洲第一毛片| 香蕉av777xxx色综合一区| 欧美国产一区二区三区激情无套| 国产精品久久久久久久久久ktv | 性色一区二区| 亚洲第一久久影院| 欧美一区二区三区免费大片| 欧美日韩国产在线观看| 国内综合精品午夜久久资源| 一区二区三区国产| 欧美激情1区2区3区| 欧美亚洲综合另类| 国产精品国产成人国产三级| 亚洲美女91| 欧美阿v一级看视频| 亚洲欧美一区二区三区极速播放| 免费欧美在线视频| 亚洲成色www8888| 久久影视三级福利片| 亚洲综合精品一区二区| 欧美无砖砖区免费| 国产精品99久久久久久宅男| 亚洲精品一区在线观看| 久久综合久久综合这里只有精品| 国产精品99久久不卡二区| 欧美精品情趣视频| 亚洲免费电影在线| 最近看过的日韩成人| 免费成人黄色| 亚洲精品综合| 亚洲精品影院| 欧美日韩一区二区三区四区在线观看 | 欧美freesex8一10精品| 欧美一区二区在线视频| 国产一区二区精品久久| 久久久国产精品一区二区三区| 亚洲免费在线电影| 国产欧美日韩高清| 久久超碰97人人做人人爱| 亚洲欧美日韩国产综合精品二区| 国产精品乱码一区二三区小蝌蚪 | 亚洲国产成人av| 欧美大片专区| 中日韩男男gay无套| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩在线观看视频| 香蕉尹人综合在线观看| 久久国产主播精品| 亚洲日本在线观看| 99视频日韩| 国产一区二区三区免费观看 | 久久av一区二区| 久久米奇亚洲| 亚洲一区二区精品在线观看| 亚洲欧美在线观看| …久久精品99久久香蕉国产 | 亚洲天堂激情| 韩国一区二区三区在线观看| 欧美国产高清| 国产精品久久久久久久9999 | 新狼窝色av性久久久久久| 欧美自拍偷拍| 亚洲精品一区二区三| 一区二区三区久久久| 国产色产综合色产在线视频| 欧美成人一品| 国产精品久久久久9999高清| 久久综合网络一区二区| 欧美日本在线看| 久久久久国产精品麻豆ai换脸| 欧美成人午夜激情在线| 欧美一级一区| 欧美国产在线电影| 久久久久看片| 午夜精品福利视频| 亚洲高清免费在线| 一区二区欧美精品| 在线国产日韩| 亚洲一区二区精品在线| 亚洲国产成人高清精品| 亚洲午夜在线观看视频在线| 亚洲人成在线观看一区二区| 亚洲在线视频网站| 一区二区91| 免费观看欧美在线视频的网站| 新片速递亚洲合集欧美合集 | 激情视频一区| 亚洲女人小视频在线观看| 亚洲免费av片| 老色鬼久久亚洲一区二区| 亚久久调教视频| 欧美日韩午夜激情| 亚洲福利视频专区| 亚洲第一在线综合网站| 欧美一级专区| 久久精品国产69国产精品亚洲 | 亚洲精品亚洲人成人网| 在线不卡中文字幕| 欧美一区二区三区婷婷月色| 校园激情久久| 国产欧美一区在线| 亚洲欧美日韩国产中文在线| 午夜精品久久久久久久久久久久久| 欧美精品综合| 最新日韩在线视频| 99视频精品全部免费在线| 欧美国产在线电影| 亚洲人体1000| 亚洲一区欧美| 国产精品视频在线观看| 午夜精品久久| 久久一区国产| 在线观看日韩av电影| 免费在线国产精品| 亚洲国产精品成人一区二区| 亚洲丰满在线| 欧美电影专区| 亚洲伦理中文字幕| 亚洲性图久久| 国产色视频一区| 久久夜色精品国产| 亚洲欧洲精品一区| 亚洲视频在线观看一区| 国产精品免费网站| 欧美一区二区三区视频免费| 麻豆91精品| 99精品99| 国产精品色婷婷久久58| 久久国产欧美精品| 亚洲国产精品一区二区尤物区| 一本色道久久综合狠狠躁篇怎么玩| 欧美日韩国产一区二区| 亚洲男同1069视频| 女同性一区二区三区人了人一 | 欧美人体xx| 午夜精品久久久久久99热| 久久另类ts人妖一区二区| 欧美精品亚洲精品| 亚洲视频一起| 久久久久国产成人精品亚洲午夜| 在线日韩中文| 国产精品久久国产精麻豆99网站| 久久久91精品国产一区二区精品| 亚洲国产精品ⅴa在线观看| 亚洲欧美色婷婷| 亚洲人精品午夜| 国产日产欧美a一级在线| 农夫在线精品视频免费观看| 在线亚洲一区二区| 免费欧美在线视频| 亚洲免费一在线| 亚洲国产另类精品专区| 国产欧美日韩视频| 欧美电影在线| 久久国产精品免费一区| 99在线热播精品免费| 嫩草影视亚洲| 久久久久国产精品一区三寸| 亚洲一区不卡| aa亚洲婷婷| 亚洲国产日韩在线| 国产一区视频网站| 国产精品一国产精品k频道56| 欧美激情欧美激情在线五月| 久久精品免费| 亚洲欧美国产精品桃花| 亚洲人成网在线播放| 欧美大片一区二区| 久久天天躁夜夜躁狠狠躁2022 | 亚洲精品一区二区三区不| 久久综合狠狠综合久久综合88| 亚洲欧美日韩国产中文| 亚洲无吗在线| 亚洲夜晚福利在线观看|