Lab 2 源码分析

extent_server

实现四个操作,分别是put(key, value), get(key), remove(key), getattr(key)
需要考虑时间,文件长度等属性

yfs_client

  1. extent_client 作为成员变量
  2. inum 成员变量,文件的标示符 //为什么这是一个成员变量,有何意义?
  3. status 记录函数的返回状态 // 为什么也是一个成员变量?
  4. fileinfo 文件的属性定义,包括三个时间和filesize
  5. dirinfo 三个时间 // 文件夹对应的文件该如何表示
  6. dirent inum和string name的对应关系
  7. isfile, isdir 函数,根据inum的第31位判断
  8. getfile, gedir返回inum对应的属性
  9. n2i, filename 获取inum和name的对应关系

Things worth notice:

  1. n2i使用的是istringstream用来将string转化到int。值得注意的是。istringstream能够处理很复杂的string,一个string可能包含很多的子string, Like "123 12 14 18"
  2. 和istringstream对应的是ostringstream。我很喜欢这种写法,比较C++

Fuse

  1. receive request from fuse and call methods of yfs_client
  2. yfs_client 全局变量。fuse本身并不是类
  3. getattr 函数。返回inum的状态,状态为stat,在stat.h中定义,比较复杂。getattr函数是个wrapper,它调用yfs的getattr函数,并将结果保存在stat中
  4. fuseserver_getattr不知是怎么用的,好像就是为了将inum保存下来。注意inum是static的
  5. fuseserver_setattr 修改文件的size,需要我们填上
  6. fuseserver_read 读取文件内容。将内容读入buf(string),同时将真是读取的文件大小传入到fuse_reply_buf中
  7. fuseserver_write 向文件写入内容,输入size, offset, buf, ino. 要处理offset溢出的问题。
  8. fuseserver_createhelper。创建文件(夹),同时记录时间
  9. fuseserver_create, 是上面那个函数的wrapper
  10. fuseserver_mknod 创建节点, 也是createhelper的wrapper
  11. fuseserver_lookup 在目录中查询文件,应该不是递归查询
  12. dirbuf 结构体含有字符数组和长度
  13. dirbuf_add 完整的函数,好像是用来在目录下加东西的
  14. reply_buf_limited offset 和 size的大小关系
  15. fuseserver_readdir 从dir中读取所有文件和文件夹的Pair, 注释提示对于目录中的每一项运行dirbuf_add函数
  16. fuseserver_open 完整的函数,直接调用fuse_reply_open函数,这应该是个底层操作
  17. fuseserver_mkdir 创建问文件夹,这和mknod什么的有啥区别呢?
  18. fuseserver_unlink 删除一个文件,不允许删除目录。
  19. fuseserver_statfs 统计状态的吧,不确定。
  20. fuse_lowlevel_ops 应该是用来调用fuse底层API的。//将上面定义的函数都复制到这个结构体里了,不知道到底怎么用的

Fuse_lowlevel

Lab 2 源码分析,布布扣,bubuko.com

时间: 2024-08-08 17:45:51

Lab 2 源码分析的相关文章

Tomcat源码分析

前言: 本文是我阅读了TOMCAT源码后的一些心得. 主要是讲解TOMCAT的系统框架, 以及启动流程.若有错漏之处,敬请批评指教! 建议: 毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, 是不那么容易掌握TOMCAT的框架的. 所以得实践.实践.再实践. 建议下载一份TOMCAT的源码, 调试通过, 然后单步跟踪其启动过程. 如果有不明白的地方, 再来查阅本文, 看是否能得到帮助. 我相信这样效果以及学习速度都会好很多! 1. Tomcat的整体框架结构 Tomcat的基本框架,

TeamTalk源码分析之login_server

login_server是TeamTalk的登录服务器,负责分配一个负载较小的MsgServer给客户端使用,按照新版TeamTalk完整部署教程来配置的话,login_server的服务端口就是8080,客户端登录服务器地址配置如下(这里是win版本客户端): 1.login_server启动流程 login_server的启动是从login_server.cpp中的main函数开始的,login_server.cpp所在工程路径为server\src\login_server.下表是logi

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A

HashMap与TreeMap源码分析

1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Java这么久,也写过一些小项目,也使用过TreeMap无数次,但到现在才明白它的实现原理).因此本着"不要重复造轮子"的思想,就用这篇博客来记录分析TreeMap源码的过程,也顺便瞅一瞅HashMap. 2. 继承结构 (1) 继承结构 下面是HashMap与TreeMap的继承结构: pu

Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938395.html 前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化.在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就是创建并启动内核线

Spark的Master和Worker集群启动的源码分析

基于spark1.3.1的源码进行分析 spark master启动源码分析 1.在start-master.sh调用master的main方法,main方法调用 def main(argStrings: Array[String]) { SignalLogger.register(log) val conf = new SparkConf val args = new MasterArguments(argStrings, conf) val (actorSystem, _, _, _) =

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三)

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三) 本文是SolrCloud的Recovery策略系列的第三篇文章,前面两篇主要介绍了Recovery的总体流程,以及PeerSync策略.本文以及后续的文章将重点介绍Replication策略.Replication策略不但可以在SolrCloud中起到leader到replica的数据同步,也可以在用多个单独的Solr来实现主从同步.本文先介绍在SolrCloud的leader到replica的数据同步,下一篇

zg手册 之 python2.7.7源码分析(4)-- pyc字节码文件

什么是字节码 python解释器在执行python脚本文件时,对文件中的python源代码进行编译,编译的结果就是byte code(字节码) python虚拟机执行编译好的字节码,完成程序的运行 python会为导入的模块创建字节码文件 字节码文件的创建过程 当a.py依赖b.py时,如在a.py中import b python先检查是否有b.pyc文件(字节码文件),如果有,并且修改时间比b.py晚,就直接调用b.pyc 否则编译b.py生成b.pyc,然后加载新生成的字节码文件 字节码对象

LevelDB源码分析--Iterator

我们先来参考来至使用Iterator简化代码2-TwoLevelIterator的例子,略微修改希望能帮助更加容易立即,如果有不理解请各位看客阅读原文. 下面我们再来看一个例子,我们为一个书店写程序,书店里有许多书Book,每个书架(BookShelf)上有多本书. 类结构如下所示 class Book { private: string book_name_; }; class Shelf { private: vector<Book> books_; }; 如何遍历书架上所有的书呢?一种实