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部分还没看), 重新看了一下, ...
随机推荐
- 【转】浮点数与IEEE 754
http://www.cnblogs.com/kingwolfofsky/archive/2011/07/21/2112299.html 浮点数 1. 什么是浮点数 在计算机系统的发展过程中,曾经 ...
- css实现纯文字内容元素透明背景(兼容IE6)
HTML: <div class="title-wrapper"> <span class="title"> <span clas ...
- 面试:C++工厂模式实现
#include <iostream> enum CTYPE {PRODUCTA,PRODUCTB}; class Product{ public: ; virtual ~Product( ...
- 读了这篇文章,你将变身web分析大师
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由shirishiyue发表于云+社区专栏 1.工具介绍 这是一个非常详细且专业的web页面性能分析工具,而且开源的!如果你打不开其 ...
- 深入学习sequoiadb巨杉数据库及python连接方式
随着公司日益复杂与多变的需求,以及迅速扩展带来的海量数据业务,我们需要在提供高效服务的同时,降低其设备与程序维护成本.算了,不吹了,说白了就是需要从巨杉数据库中抓取大量的数据,但是我现在不会,所以需要 ...
- git commit之后,想撤销commit
原文 写完代码后,我们一般这样 git add . //添加所有文件 git commit -m "本功能全部完成" 执行完commit后,想撤回commit,怎么办? 这样凉拌: ...
- VS2010安装MVC3失败的解决方法
环境:Win 7 x64 原因:在安装MVC3之前,安装过VS2010 SP1,导致MVC3安装,找不到对于的VS2010安装器 vs_setup.msi 问题图片: 解决方法: 一.来自网络的方法 ...
- Idea中JDK为1.8,还提示Diamond types are not supported at this language level
project的java level 已经核实确实为8,但是IDEA里面仍然会有如下图的提示: 通过查看项目设置,发现project的java level 也是8. 然后继续检查其他模块 如modul ...
- [PHP] 算法-根据前序和中序遍历结果重建二叉树的PHP实现
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5 ...
- canvas离屏技术与放大镜实现
教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)canvas 离屏技术与放大镜实现. 更多讨论或者错误提交,也请移步. 利用canvas除了可以实现 ...