FUSE 文件系统 example部分 源码注释 (libfuse 2.9.9)
本篇文章主要是针对fuse-2.9.9 Example 部分 给出的源码,结合官方文档,以及网上的资料给出注释,希望能给正在学习的你们一点帮助。
Hello.c
/*
FUSE: Filesystem in Userspace
Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu> This program can be distributed under the terms of the GNU GPL.
See the file COPYING. gcc -Wall hello.c `pkg-config fuse --cflags --libs` -o hello
*/ #define FUSE_USE_VERSION 26 //先定义, fuse.h中有判断 #include <fuse.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h> static const char *hello_str = "Hello World!\n";
static const char *hello_path = "/hello"; // 与函数stat()类似,用于得到文件属性,并将其存入到结构体struct stat当中 struct stat *stbuf
static int hello_getattr(const char *path, struct stat *stbuf)
{
int res = ; memset(stbuf, , sizeof(struct stat)); // 使用memset进行初始化结构体
if (strcmp(path, "/") == ) {
stbuf->st_mode = S_IFDIR | ; // S_IFDIR 用于说明 / 为目录
stbuf->st_nlink = ;
} else if (strcmp(path, hello_path) == ) {
stbuf->st_mode = S_IFREG | ; // S_IFREG 用于说明/hello 为常规文件
stbuf->st_nlink = ;
stbuf->st_size = strlen(hello_str); // 设置文件长度为hello_str的长度
} else
res = -ENOENT; // 返回错误信息,没有该文件或者目录 return res; // 成功执行的时候,此函数返回值为 0
} // 该函数用于读取目录中的内容,并在/目录下增加了. .. hello 三个目录项
static int hello_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
off_t offset, struct fuse_file_info *fi)
{
(void) offset;
(void) fi; if (strcmp(path, "/") != )
return -ENOENT; /* fill, 其作用是在readdir函数中增加一个目录项
typedef int (*fuse_fill_dir_t) (void *buf, const char *name,
const struct stat *stbuf, off_t off);
*/ filler(buf, ".", NULL, );
filler(buf, "..", NULL, );
filler(buf, hello_path + , NULL, ); //指针+1(/hello), 即增加 hello 目录项,去掉前面的'/' return ;
} // 打开文件函数
static int hello_open(const char *path, struct fuse_file_info *fi)
{
if (strcmp(path, hello_path) != )
return -ENOENT; if ((fi->flags & ) != O_RDONLY)
return -EACCES; return ;
} // 读文件函数
static int hello_read(const char *path, char *buf, size_t size, off_t offset,
struct fuse_file_info *fi)
{
size_t len;
(void) fi;
if(strcmp(path, hello_path) != )
return -ENOENT; len = strlen(hello_str);
if (offset < len) {
if (offset + size > len)
size = len - offset;
memcpy(buf, hello_str + offset, size);
} else
size = ; return size;
} // 注册自定义函数
static struct fuse_operations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read, // 读文件函数
}; // 调用 fuse_main , 把控制权交给了fuse
int main(int argc, char *argv[])
{
return fuse_main(argc, argv, &hello_oper, NULL);
}
2019.6.30
这个文档好像很久没有更新了,项目fuse使用完成了,例子不想更新了。大家有什么问题可以在评论区给我留言。
保持更新,转载请注明出处。如果你有什么问题,欢迎在留言区进行留言交流。https://www.cnblogs.com/xuyaowen/p/fuse-example-source-code.html
FUSE 文件系统 example部分 源码注释 (libfuse 2.9.9)的更多相关文章
- 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 百篇博客分析OpenHarmony源码 | v13.02
百篇博客系列篇.本篇为: v13.xx 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 51.c.h .o 几点说明 kernel_liteos_a_note | 中文注解鸿蒙内核 ...
- AtomicInteger源码注释
AtomicInteger源码 在java.util.concurrent.atomic包下提供了大量的原子类,这里以AtomicInteger源码为例,添加了一些注释,个人理解,供参考: 其中比较重 ...
- 简易富文本编辑器bootstrap-wysiwyg源码注释
好久没写随笔了,因为最近比较忙,小公司基本都是一个前端干所有属于和部分不属于前端的事情,所以就没空弄了,即使想分享,也因为没有时间和精力就搁置了. 这周周六日休息,正好时间比较充裕(ps:目前处在单休 ...
- WebBench压力测试工具(详细源码注释+分析)
本文适合人群:对WebBench实现感兴趣的人 WebBench原理: Linux下使用的服务器压力测试工具,利用fork建立多个子进程,每个子进程在测试时间内不断发送请求报文,建立多个连接,然后由父 ...
- BackboneJS 源码注释
Backbone 作者在源码中做了很好的注释,这里只是锦上添花,补充一些个人的理解而已. // Backbone.js 1.2.3 // (c) 2010-2015 Jeremy Ashkenas, ...
- Normalize.css源码注释翻译&浏览器css兼容问题的理解
版本v5.0.0源码地址: https://necolas.github.io/normalize.css/5.0.0/normalize.css 翻译版: /*! normalize.css v5. ...
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题. 该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列 ...
- 中文情感分析——snownlp类库 源码注释及使用
最近发现了snownlp这个库,这个类库是专门针对中文文本进行文本挖掘的. 主要功能: 中文分词(Character-Based Generative Model) 词性标注(TnT 3-gram 隐 ...
- jQ1.5源码注释以及解读RE
jQ作为javascript的库( ▼-▼ ), 尽善尽美, 代码优美, 值得学习. 这一周平常上班没啥事也看jQ1.5的代码, 今天周六差不多看完了(Sizzle部分还没看), 重新看了一下, ...
随机推荐
- 《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
<ASP.NET Core跨平台开发从入门到实战>样章节 Web API自定义格式化protobuf. 样章 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于 ...
- 从零开始学 Web 之 Ajax(七)跨域
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 从零开始学 Web 之 移动Web(六)响应式布局
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- windows下安装Jenkins
1.在机子上安装jdk8 2.下载jenkins.war在里面可以选择任意版本的war包,lastest为最新的,推荐下载! 官网地址:https://jenkins.io/download/ 3.打 ...
- 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\106f9ae8\cc0e1169\App_global.asax.haz99mum.dll”--“拒绝访问。 ”
在本地开发环境没问题,但是发布到服务器出现:未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Fil ...
- 【学习笔记】深入理解HTTP协议
参考:关于HTTP协议,一篇就够了,感谢作者认真细致的总结,本文在理解的基础上修改了内容,加深印象的同时也希望对大家有所帮助 HTTP是什么? HTTP协议是Hyper Text Transfer P ...
- 从零搭建生产环境的ghost2.0博客
当前安装过程是在ghost cli 1.9.2上的,由于ghost更新特别快,我安装我个人博客cmlanche.com的时候还是1.9.1,当时没碰到啥问题,到1.9.2就有一点点不一样了,所以要注意 ...
- 深入理解Java重载与重写
我们都知道Java有三大宝,分别是:多态.封装.继承.其中多态主要体现就是重写与重载(有些人认为重载根本不属于多态)两种方式,那么今天就结合研读过JVM之后自己的理解来聊聊重载与重写的VM内部是怎么实 ...
- 使用Django创建网站项目<二>
上一篇:Windows安装diango框架<一> 创建项目,启动服务器 利用安装好的django包的django-admin.py创建项目,命令 python django-admin. ...
- jquery 获得下拉框的值《转》
获取Select : 获取select 选中的 text : $("#ddlRegType").find("option:selected").text(); ...