Linux下的鍊錶使用簡介

2021-09-30 09:51:22 字數 1507 閱讀 7413

資料結構在coding中起到了非常重要的作用,重要的資料結構包括了鍊錶,棧,佇列,樹等等。這裡介紹一些鍊錶在核心中的實現。

我們書本上學到的鍊錶的一般實現方式如下:

struct my_link

這種做法是資料嵌入到鍊錶結構中。在核心中,存在著各種各樣的資料,很多都需要鍊錶操作。如果對每個資料結構都採用這樣方式來實現鍊錶操作的話,既容易出錯,又無謂的增加了核心的大小。最好核心能提供乙個統一鍊錶操作介面,liunx自然做到了。

資料結構:

struct list_head;

使用:採用資料嵌入liat_head的方式來實現鍊錶。舉個例子

struct net_device;

那麼怎麼獲得根據鍊錶獲得資料結構呢?

需要使用list_entry,最終呼叫container_of巨集。

功能函式:

宣告鍊錶

list_head_init()

list_head

執行時初始化函式

init_list_head

鍊錶遍歷及資料操作

list_for_each 遍歷鍊錶

list_for_each_entry 遍歷鍊錶並取得資料,相當於list_for_each 和list_entry 的結合

鍊錶操作函式

list_add(struct list_head *new,struct list_head *head);

list_add_tail(struct list_head *new,struct list_head *head);

list_del(struct list_head *entry)

list_replcace(struct list_head *old,struct list_head *new);

list_move(struct list_head *list, struct list_head *head);//從乙個鍊錶移動到另外乙個

list_is_last(struct list_head *list, struct list_head *head);

list_empty(const struct list_head *head)

list_splice(const struct list_head *list,struct list_head *head);//合併鍊錶

list_move_tail(struct list_head *list,struct list_head *head);//從尾部乙個鍊錶移動到另外乙個

list擴充套件

1,對應hash列表,linux採用了單指標雙迴圈鍊錶。hlist表頭只有乙個指向首節點的指標,沒有指向尾節點的指標,這樣可能對於海量hash表中表頭能減少一半的空間消耗。

2,對list的操作同樣提供了以_rcu結尾的巨集。rcu(read-copy update)通過延遲寫來提高效能。

linux下tcpdump的使用簡介

簡介 用簡單的話來定義tcpdump,就是 dump the traffic on a network,根據使用者的定義對網路上的資料報進行截獲的包分析工具。tcpdump可以將網路中傳送的資料報的 頭 完全截獲下來提供分析。它支 持針對網路層 協議 主機 網路或埠的過濾,並提供and or not...

Linux下cmake使用簡介

cmake好像都說比直接寫makefile牛一點,因為它可以自動生成makefile。專門針對檔案比較多的情況,要不是這幾天在用別人的 一大堆,我覺得用makefile也夠了,但是據說linux程式設計師必備技能啊,所以還是要學學這麼高階的東西。在源 目錄src中建立cmakelists.txt檔案...

linux 下samba使用簡介

今天裝了一台真正的linux主機 red hat 呵呵。安裝好了ftp,ssh等服務,但是好像還需要個window能和linux共享資料夾的軟體samba,還好,一開始在安裝linux的時候,就按照了smaba,如果沒有,我們可以在iso中提取rpm包來安裝。主要參考文獻為 1.確認smaba是否安...