FUSE API 的兩種使用方法

2021-08-25 20:16:16 字數 1549 閱讀 2261

fuse 虛擬檔案系統整合到我們的應用程式時,有兩種使用策略,一種是使用比較上層的api,

主迴圈我們只能呼叫 ret = fuse_main (fargc, fargv, &my_handler, null) 這個主迴圈的介面,

my_handler我們只取我們關心api屬性,如下所示

static struct fuse_operations my_handler = ;

然後我們自己要來實現上面的各種 xmp_ 開頭的函式。

還有一種是使用 fuse_session_loop 這個比較底層的函式來實現,這個時候我們要實現的api都是一些比較底層

的api, 比如下面的**所示 :

static struct fuse_lowlevel_ops lowlevel_handler = ;

具體的使用方法如下 :

struct fuse_chan *ch; fargc = 3; fargv[0] = g_config.processname; fargv[1] = g_config.mountsource; fargv[2] = g_config.mountpath; struct fuse_args args = fuse_args_init(fargc, fargv); snprintf (buf, sizeof(buf)-1, "umount -l %s", g_config.mountpath); system(buf); ret = fuse_parse_cmdline(&args, &g_config.mountpath, null, null); ch = fuse_mount(g_config.mountpath, &args); if (ret == -1 || ch == null) struct fuse_session *se; se = fuse_lowlevel_new(&args, &lowlevel_handler, sizeof(lowlevel_handler), null); if (se != null) fuse_session_destroy(se); } fuse_unmount(g_config.mountpath, ch); fuse_opt_free_args(&args);;

底層的api使用起來相對靈活性大一點,本人推薦使用底層的api。當然了,上層的api使用起來相對簡單一點。

void lowlevel_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi) }

另外在使用fuse的時候,要注意的是 struct fuse_file_info *fi 這個結構體資料的填充,

其中最關鍵的是 direct_io 和 nonseekable。

具體如下 :

fi->fh = socket(pf_inet, sock_stream, 0);

fi->direct_io = 1;

fi->nonseekable = 0;

設定了direct_io=1 可以提高檔案讀寫的速度,一次io的大小就不在侷限於4k,

設定 nonseekable=0, 上層的應用才可以呼叫seek函式進行,否則無法seek。

這兩個地方時很關鍵的。

update set的兩種使用方法

建立資料表 create database study use study create table s sno varchar 20 primary key not null,sname varchar 20 not null,varchar 10 dept varchar 20 birth da...

shopnc分頁的兩種使用方法

用查詢 構造器 的分頁處理,超簡單,只需要使用 page 10 這個方法,就表示每頁顯示10條了。如果需要手寫sql語句,就沒法使用查詢構造器了。處理方法如下。簡單說就是手動去設定每頁顯示的條數,總記錄數,然後拼接出limit子句,加到sql語句裡。在前端頁面顯示分頁鏈結,一句話就搞定。tr tdc...

成員內部類的使用方法(兩種)

成員內部類定義格式 修飾符 class 類名稱 注意 內用外,隨意訪問 外用內,需要內部類物件。如何使用內部類?兩種方法 1.在外部類的方法當中,使用內部類 然後main只是呼叫外部類的方法 間接 2.直接方式,公式 類名稱 物件名 new 類名稱 外部類名稱.內部類名稱 物件名 new 外部類名稱...