首页 > 其他 > 详细

Lab 2 源码分析

时间:2014-06-23 07:01:54      阅读:522      评论:0      收藏:0      [点我收藏+]

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

Lab 2 源码分析

原文:http://www.cnblogs.com/zhouzhuo/p/3799691.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!