在 linux 核心中,有大量的資料結構需要用到雙向鍊錶,例如程序、檔案、模組、頁面等。 若採用雙向鍊錶的傳統實現方式,需要為這些資料結構維護各自的鍊錶,並且為每個鍊錶都 要設計插入、刪除等操作函式。因為用來維持鍊錶的 next 和 prev 指標指向對應型別的對 象,因此一種資料結構的鍊錶操作函式不能用於操作其它資料結構的鍊錶。 比如,我們需要分別定義星星和 web 伺服器超時的鍊錶結構 :
那麼我們如何採用的解決方式是共享鍊錶:
共享鍊錶的形式是這樣的:
typedef struct _doublelinknode dblinknode;
//鍊錶作為掛點放在資料上面
//時鐘掛點
typedef struct _conntimeoutconntimeout;
//星載掛點
typedef struct _startstart;
如下的乙個小demo:
/*
linux核心鍊錶,使用的原因是因為通過乙個鍊錶就能實現對多個數結構體的刪除*/#
include
#include
#include
#include
using
namespace std;
//結構體指標
typedef
struct
_doublelist
doublelist,nodelist;
//時鐘掛點
typedef
struct
_conntimeout
conntimeout;
typedef
struct
_start
start;
//初始化鍊錶
void
init
(doublelist &l)
//插入元素
void
insertelemdata
(doublelist &l,doublelist &node)
intmain
(void
)//計算偏移值
int offset =
offsetof
(conntimeout,d)
;//獲取偏移值
doublelist * p =
&(t->d)
;while
(p->next)
//銷毀鍊錶
printf
("\n");
p =&(t->d)
;//doublelist *d;
while
(p)system
("pause");
return0;
}
企業級鍊錶設計思路
define crt secure no warnings include include include 節點結構體 struct linknode 鍊錶結構體 struct llist 取個別名 typedef void linklist 鍊錶的初始化 返回鍊錶結構體 linklist init...
關於Docker的企業級應用
難怪docker正在迅速發展。docker,乙個開源專案。僅僅兩年,docker價值近10億美元,最近獲得了9500萬美元的資金。令人激動的是,我們看到有這麼多開發者對這個專案的熱情。然而,我將在下面討論企業使用docker本身是不夠的。許多企業it團隊解決這兩個問題 首先,開發者和運維者在優先順序...
EJB 企業級應用的架構 5
ejb擴充套件元件 ejb的依賴注入,都是依賴於jndi的。在ejb組建中呼叫其他的ejb元件 可以借助於jndi,查詢到其他ejb元件,也可以借助於業務介面,呼叫ejb例項中的業務方法,也可以同國直接引用其他的需要的ejb元件的業務介面,但是需要使用標註。例 ejb taxrate tr 標註 s...