Seq file檔案系統例項剖析

2021-06-08 17:50:21 字數 2040 閱讀 4271

seq_file file system

針對proc檔案的不足而誕生了seq_file。

seq_file的實現基於proc檔案。使用seq_file,使用者必須抽象出乙個鏈結物件,然後可以依次遍歷這個鏈結物件。這個鏈結物件可以是鍊錶,陣列,雜湊表等等。

程式設計介面

seq_file必須實現四個操作函式:start(), next(), show(), stop()。

struct seq_operations

;start():

主要實現初始化工作,在遍歷乙個鏈結物件開始時,呼叫。返回乙個鏈結物件的偏移或者seq_start_token(表徵這是所有迴圈的開始)。出錯返回err_ptr。

stop():

當所有鏈結物件遍歷結束時呼叫。主要完成一些清理工作。

next():

show():

對遍歷物件進行操作的函式。主要是呼叫seq_printf(), seq_puts()之類的函式,列印出這個物件節點的資訊。

下圖描述了seq_file函式對乙個鍊錶的遍歷。

2、重要的資料結構

除了struct seq_operations以外,另乙個最重要的資料結構是struct seq_file:

struct seq_file ;

該結構會在seq_open函式呼叫中分配,然後作為引數傳遞給每個seq_file的操作函式。privat變數可以用來在各個操作函式之間傳遞引數。

3、seq_file使用示例:

#include

/* for use of init_net*/

#include

/* we\'re doing kernel work */

#include

/* specifically, a module */

#include

/* necessary because we use proc fs */

#include

/* for seq_file */

#define proc_name \"my_seq_proc\"

module_author(

\"dreamice:[email protected]\");

module_license(

\"gpl\");

static

void

*my_seq_start(

struct seq_file *s, loff_t *pos)

else

}static

void

*my_seq_next(

struct seq_file *s,

void

*v, loff_t *pos)

static

void my_seq_stop(

struct seq_file *s,

void

*v)static

int my_seq_show(

struct seq_file *s,

void

*v)static

struct seq_operations my_seq_ops =

;static

int my_open(

struct inode *inode,

struct

file

*file);

static

struct file_operations my_file_ops =

;int init_module(

void

)printk(kern_info\"initialze my_seq_proc success!\\n\");

return 0;

}/**

* this function is called when the module is unloaded.**/

void cleanup_module(

void)

該程式在/proc/net下註冊乙個my_seq_proc檔案。有興趣的朋友可以測試一下。

總結待續

Linux 檔案系統剖析

在檔案系統方面,linux 可以算得上作業系統中的 瑞士軍刀 linux 支援許多種檔案系統,從日誌型檔案系統到集群檔案系統和加密檔案系統。對於使用標準的和比較奇特的檔案系統以及開發檔案系統來說,linux 是極好的平台。本文討論 linux 核心中的虛擬檔案系統 vfs,有時候稱為虛擬檔案系統交換...

Android檔案系統深入剖析

1 android檔案系統的結構 android原始碼編譯後得到system.img,ramdisk.img,userdata.img映像檔案。其中,ramdisk.img是emulator的檔案系統,system.img包括了主要的包 庫等檔案,userdata.img包括了一些使用者資料,emu...

Android檔案系統深入剖析

1 android檔案系統的結構 android原始碼編譯後得到system.img,ramdisk.img,userdata.img映像檔案。其中,ramdisk.img是emulator的檔案系統,system.img包括了主要的包 庫等檔案,userdata.img包括了一些使用者資料,emu...