Libevent原始碼分析 開篇

2021-07-29 20:12:10 字數 1537 閱讀 3631

我所分析的libevent版本是2.0.21版本,是目前最新的穩定版本。看這系列博文中,需要讀者有linux程式設計的一些基礎。因為像posix、檔案描述符、多執行緒等等這些概念,我並不會去解釋,我預設讀者已經熟悉這些概念了。如果讀者讀過《unix環境高階程式設計》,那就完全沒問題了。

因為libevent是跨平台的,所以它使用了很多它自己定義的通用跨平台型別,比如evutil_socket_t。此外,libevent也定義了一些跨平台通用的api,這些都可以在《通用型別和函式》一文中找到。

相信來看本系列的文章的讀者,都不會是剛剛接觸libevent的使用者。這裡就不說libevent的優點和怎麼安裝使用libevent了。我是想介紹其他東西。

這個工具是閱讀**的神器。下面是乙個截圖。

正**是**視窗。在**中,如果你想看一下event_assign函式的內部是怎麼實現的,那麼你不用找到event_assign函式實現檔案,然後開啟,再ctrl + f查詢。在source insight中,你只需用滑鼠單擊一下event_assign函式。那麼就會在下面的那個視窗顯示event_assign函式的具體實現。是不是很厲害的功能?

右邊的視窗是檔案列表,和其他ide的功能差不多。

左邊那個視窗功能也是很強大的,特殊是當**中出現了很多條件巨集。在這樣的條件下,這個巨集會被定義成這樣。在那樣的條件下,又會定義成那樣。左邊的視窗可以清楚地看到。

這是乙個可以製作chm檔案的工具。

在source insight中,雖然是很容易追蹤到某個函式的具體實現(實現都在c檔案中,非標頭檔案)。但libevent的原始檔中很少有注釋,也沒有這個函式的解釋。而且source insight無法追蹤到函式的宣告,只能追蹤到定義(就是函式的實現)(或許是我對source insight還不熟悉,如果有這樣的功能,還望大家指出)。

而由doxgen工具生成的chm檔案是離線把的幫助文件,它會列出函式的說明、引數和返回值。

怎麼用doxgen工具製作libevent的離線版幫助文件,可以參考

在libevent的源**中,經常能看到do{}while(0)巨集的使用。如果是第一次碰到這種寫法,估計都會比較不解。可以參考來解惑。

有時候追蹤乙個函式,想知道該函式的呼叫關係圖。有乙個**提供了這個關係圖。下面舉兩個例子。

圖中,上面的是event_free函式會呼叫哪些函式,一顆主呼叫樹。下面的是哪些函式會呼叫event_free函式,是被呼叫關係。其中test_event_pending這些是libevent提供的測試例子的測試函式。下面再給另外乙個被呼叫關係的圖:

有乙個不足之處,這個**並沒有和libevent同步更新,目前提供的最高libevent版本是2.0.3-alpha

Libevent原始碼分析 開篇

出處 我所分析的libevent版本是2.0.21版本,是目前最新的穩定版本。看這系列博文中,需要讀者有linux程式設計的一些基礎。因為像posix 檔案描述符 多執行緒等等這些概念,我並不會去解釋,我預設讀者已經熟悉這些概念了。如果讀者讀過 unix環境高階程式設計 那就完全沒問題了。因為lib...

Libevent原始碼分析 記憶體分配

libevent的記憶體分配函式還是比較簡單的,並沒有定義記憶體池之類的東西。如同前一篇部落格 那樣,給予libevent庫的使用者充分的設定權 定製 即可以設定使用者 libevent庫的使用者 自己的記憶體分配函式。至於怎麼分配,主動權在於使用者。但在設定 定製 的時候要注意一些地方,下面會說到...

Libevent原始碼分析(零) 前言

libevent的介紹網上比較多,基本有以下幾個特點 事件驅動,高效能 高效能是libevent最重要的特性,後續原始碼分析中我們將分析為何libevent會如此高效。輕量級,專注於網路 筆者使用過ace,也讀過一些ace的原始碼,ace功能太多,組織也相對混亂,和ace相比,libevent專注於...