fuse的API修改
这里的fuse API基于python进行修改fuse的安装请参照fuse的安装博客
在你挂载的目录下你进行的操作才会调用到的FUSE的文件系统,例如,你将/usr 挂载到了/opt/fuse下面,当你进入/opt/fuse下以后你使用的指令才是你写的文件系统的指令
这些指令不光是由一个fuse的函数执行而是由多个函数共同实现的
如:cd 操作调用到的函数由
_full_path
getattr
access
_full_path函数返回当前文件的原本路径
getattr函数事项文件属性的获取
access函数实现当前径的转换
所以必须修改这两个函数才能实现cd操作
修改API大多调用python中的os,os.path库函数,大家可以试着去看一看这些库函数
如_full_path函数
def _full_path(self, partial):
if partial.startswith("/"):
partial = partial[1:]
path = os.path.join(self.root, partial)
return path
如getattr修改代码:
def getattr(self, path, fh=None):
full_path = self._full_path(path)
st = os.lstat(full_path)
return dict((key, getattr(st, key)) for key in ('st_atime', 'st_ctime',
'st_gid', 'st_mode', 'st_mtime', 'st_nlink', 'st_size', 'st_uid'))
如access代码:
def access(self, path, mode):
full_path = self._full_path(path)
if not os.access(full_path, mode):
raise FuseOSError(errno.EACCES)
以下提供以下指令调用函数的顺序
---挂载
_init_
---cd
---getattr
_full_path
access
_full_path
---ls
readdir
_full_path
getattr
_full_path
readline
_full_path
getattr
---mkdir
getattr
_full_path
mkdir
_full_path
getattr
_full_path
---rm
getattr
_full_path
getattr
_full_path
readdir
_full_path
rmdir
_full_path
---tab(键)
readdir
_full_path
getattr
_full_path
---cat
getattr
_full_path
open
_full_path
read
getattr
_full_path
flush
release
附带一个可运行的fuse
#!/usr/bin/env python
from __future__ import with_statement
import os
import sys
import errno
from fuse import FUSE, FuseOSError, Operations
class Passthrough(Operations):
def __init__(self, root):
self.root = root
def _full_path(self, partial):
if partial.startswith("/"):
partial = partial[1:]
path = os.path.join(self.root, partial)
return path
def access(self, path, mode):
full_path = self._full_path(path)
if not os.access(full_path, mode):
raise FuseOSError(errno.EACCES)
def getattr(self, path, fh=None):
full_path = self._full_path(path)
st = os.lstat(full_path)
return dict((key, getattr(st, key)) for key in ('st_atime', 'st_ctime',
'st_gid', 'st_mode', 'st_mtime', 'st_nlink', 'st_size', 'st_uid'))
def readdir(self, path, fh):
full_path = self._full_path(path)
dirents = ['.', '..']
if os.path.isdir(full_path):
dirents.extend(os.listdir(full_path))
for r in dirents:
yield r
def main(mountpoint, root):
FUSE(Passthrough(root), mountpoint, foreground=True)
if __name__ == '__main__':
main(sys.argv[2], sys.argv[1])
相关推荐
fuse-2.7.4.tar版本,解压缩,即可编译安装。
基于快盘的API实现的可以在linux下面使用的Fuse客户端,运行程序后,会生成一个linux下的挂载点,以普通文件夹的方式操作快盘。目前实现了以下功能:文件的浏览,文件异步上传, 下载。文件的管理, 建立目录,删除...
以内存作为存储区,基于FUSE,模拟 UNIX 的文件系统结构,设计一个简单的文件系统,并提供以下 的文件和目录操作接口:创建文件、删除文件、打开文件、关闭文件、读文件、写文件。...在linux下运行
基于fuse的exfat库移植--Linux交叉编译通用 解压可用
linux 下挂载硬盘 fuse 自己找的
MessageQueue API ActiveMQ API, jms 消息队列API
exfat suport linux exfat-fuse ntfs
基于FUSE框架的文件系统-课程设计,内含其思想与方法。 同步到博客: http://blog.csdn.net/u012587561/article/details/50908656 资源一分表礼尚往来。
使用了fuse提供的接口,实现了一个在linux下的简单的文件系统。
一种Linux下基于Upnp和FUSE的虚拟网络用户文件系统的构建与研究.pdf
官方的linuxkernel版本到2.6.14才添加了FUSE模块,因此2.4的内核模块下,用户如果要在FUSE中创建一个文件系统,需要先安装一个FUSE内核模块,然后使用FUSE库和API来创建。 FUSE具有的特点如下: 库文件简单 ...
保险丝关于FUSE(用户空间中的文件系统)是用户空间程序将文件系统导出到 Linux 内核的接口。FUSE 项目由两个组件组成:fuse内核模块(在常规内核存储库中维护)和libfuse用户空间库(在此存储库中维护)。libfuse ...
libfuse关于FUSE(用户空间中的文件系统)是用户空间程序将文件系统导出到Linux内核的接口。 FUSE项目包含两个组件:保险丝内核模块(在常规内核存储库中维护)和libfuse用户空间库(在此存储库中维护)。 libfuse...
linux下挂载ntfs硬盘所需软件fuse-2.7.4.tar.gz及ntfs-3g-2009.4.4.gz
Linux系统管理技术实验8-linux下软件的安装和卸载.doc
离线安装包,亲测可用
linux下用户空间的文件系统(FUSE) 使用 FUSE 可以开发功能完备的文件系统:其具有简单的 API 库,可以被非特权用户访问,并可以安全的实施。更重要的是,FUSE 以往的表现充分证明了其稳定性。 针对2.6.26以上的...
Fuse React是用React钩子编写的(React的新特性允许您在不编写类的情况下使用状态和其他React特性)。 Fuse React是一个完整的React管理模板,遵循谷歌的材料设计指南。 Fuse React管理模板使用Material UI V5作为...
本文仅针对Fuse(熔断器)选型,PPTC&CPTC及其他过流保护装置或电路不在其列。针对Fuse设计选型相关基础知识介绍及选型参考标准、选型方法介绍等内容。
FUSE,全称为Filesystem in Userspace,中文名为用户空间文件系统。在某些操作系统中,包含了FUSE内核模块,通过...Linux用于支持用户空间文件系统的内核模块名叫FUSE,FUSE一词有时特指Linux下的用户空间文件系统。