FUSE 虚拟文件系统集成到我们的应用程序时,有两种使用策略,一种是使用比较上层的API,
主循环我们只能调用 ret = fuse_main (fargc, fargv, &my_handler, NULL) 这个主循环的接口,
my_handler我们只取我们关心API属性,如下所示
然后我们自己要来实现上面的各种 xmp_ 开头的函数。
还有一种是使用 fuse_session_loop 这个比较底层的函数来实现,这个时候我们要实现的API都是一些比较底层
的API, 比如下面的代码所示 :
具体的使用方法如下 :
底层的API使用起来相对灵活性大一点,本人推荐使用底层的API。当然了,上层的API使用起来相对简单一点。
下面复制了一个具体的底层API的实现,供大家参考。
另外在使用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。
这两个地方时很关键的。