1、 獲取數據
工具libcurl
libcurl主要功能就是用不同的協議連接和溝通不同的服務器。libcurl當前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 協議。libcurl同樣支持HTTPS證書授權,HTTP POST, HTTP PUT, FTP 上傳(當然你也可以使用PHP的ftp擴展), HTTP基本表單上傳,代理,cookies,和用戶認證。
主要函數介紹:
CURL *curl_easy_init( );
描述:curl_easy_init用來初始化一個CURL的指針(有些像返回FILE類型的指針一樣). 相應的在調用結束時要用curl_easy_cleanup函數清理.一般curl_easy_init意味着一個會話的開始. 它的返回值一般都用在easy系列的函數中.
CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
描述:這個函數最重要了.幾乎所有的curl 程序都要頻繁的使用它.它告訴curl庫.程序將有如何的行為. 比如要查看一個網頁的html代碼等.
CURLcode curl_easy_perform(CURL *handle);
描述:這個函數在初始化CURL類型的指針 以及curl_easy_setopt完成后調用. 就像字面的意思所說perform就像是個舞台.讓我們設置的option 運作起來.
void curl_easy_cleanup(CURL *handle);
描述:這個調用用來結束一個會話.與curl_easy_init配合着用.
參考鏈接:
http://www.cnblogs.com/pcdelphi/archive/2011/04/12/2017947.html
http://blog.chinaunix.net/uid-20692625-id-3203258.html
http://www.kuqin.com/article/23candcplusplus/586014.html
2、 解析數據
工具tinyxml
TinyXML是一個開源的解析XML的解析庫,能夠用於C++,能夠在Windows或Linux中編譯。這個解析庫的模型通過解析XML文件,然后在內存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹。
DOM模型即文檔對象模型,是將整個文檔分成多個元素(如書、章、節、段等),並利用樹型結構表示這些元素之間的順序關系以及嵌套包含關系。
參考鏈接:
http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html
3、 其他輔助功能
工具pthread
POSIX線程(POSIX threads),簡稱Pthreads,是線程的POSIX標准。該標准定義了創建和操縱線程的一整套API。在類Unix操作系統(Unix、Linux、Mac OS X等)中,都使用Pthreads作為操作系統的線程。Windows操作系統也有其移植版pthreads-win32。
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*),void *arg);
描述:創建線程。若線程創建成功,則返回0。若線程創建失敗,則返回出錯編號,並且*thread中的內容是未定義的。
返回成功時,由tidp指向的內存單元被設置為新創建線程的線程ID。attr參數用於指定各種不同的線程屬性。新創建的線程從start_rtn函數的地址開始運行,該函數只有一個萬能指針參數arg,如果需要向start_rtn函數傳遞的參數不止一個,那么需要把這些參數放到一個結構中,然后把這個結構的地址作為arg的參數傳入。
int pthread_join(pthread_t thread, void **retval);
描述 :pthread_join()函數,以阻塞的方式等待thread指定的線程結束。當函數返回時,被等待線程的資源被收回。如果線程已經結束,那么該函數會立即返回。並且thread指定的線程必須是joinable的。
參數 :thread: 線程標識符,即線程ID,標識唯一線程。retval: 用戶定義的指針,用來存儲被等待線程的返回值。
返回值 : 0代表成功。 失敗,返回的則是錯誤號。
int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
描述:pthread_mutex_init()函數是以動態方式創建互斥鎖的,參數attr指定了新建互斥鎖的屬性。如果參數attr為空,則使用默認的互斥鎖屬性,默認屬性為快速互斥鎖 。互斥鎖的屬性在創建鎖的時候指定,在LinuxThreads實現中僅有一個鎖類型屬性,不同的鎖類型在試圖對一個已經被鎖定的互斥鎖加鎖時表現不同。
int pthread_mutex_lock(pthread_mutex_t *mutex);
描述:當pthread_mutex_lock()返回時,該互斥鎖已被鎖定。線程調用該函數讓互斥鎖上鎖,如果該互斥鎖已被另一個線程鎖定和擁有,則調用該線程將阻塞,直到該互斥鎖變為可用為止。
int pthread_mutex_unlock(pthread_mutex_t *mutex);
描述:與pthread_mutex_lock成對存在。
int pthread_mutex_destroy(pthread_mutex_t *mutex); //mutex 指向要銷毀的互斥鎖的指針
描述:互斥鎖銷毀函數在執行成功后返回 0,否則返回錯誤碼。
int pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr);
描述:初始化一個條件變量
int pthread_cond_wait(pthread_cond_t *cv,pthread_mutex_t *mutex);
描述:函數將解鎖mutex參數指向的互斥鎖,並使當前線程阻塞在cv參數指向的條件變量上。被阻塞的線程可以被pthread_cond_signal函數,pthread_cond_broadcast函數喚醒,也可能在被信號中斷后被喚醒。
int pthread_cond_signal(pthread_cond_t *cond);
描述:pthread_cond_signal函數的作用是發送一個信號給另外一個正在處於阻塞等待狀態的線程,使其脫離阻塞狀態,繼續執行.如果沒有線程處在阻塞等待狀態,pthread_cond_signal也會成功返回。
但使用pthread_cond_signal不會有“驚群現象”產生,他最多只給一個線程發信號。假如有多個線程正在阻塞等待着這個條件變量的話,那么是根據各等待線程優先級的高低確定哪個線程接收到信號開始繼續執行。如果各線程優先級相同,則根據等待時間的長短來確定哪個線程獲得信號。但無論如何一個pthread_cond_signal調用最多發信一次。
int pthread_cond_destroy(pthread_cond_t *cond);
描述:銷毀cond指向的條件變量。
以上工具均可在linux、windows下使用