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])
相关推荐
1. **源代码**:供开发者编译和修改FUSE库的C语言源代码。 2. **头文件**(headers):提供给应用程序开发者使用的接口定义。 3. **Makefile**:编译和安装FUSE的指令。 4. **文档**:可能包括README文件、INSTALL...
FUSE(Filesystem in Userspace)是一个开源的Linux内核模块,它允许普通用户在Linux系统上实现自己的文件系统,而无需对内核代码进行修改。Fuse-2.8.0是该系统的某一版本,发布于2009年,为用户提供了一种灵活的...
FUSE(Filesystem in Userspace)是一种独特的技术,它允许用户在用户空间实现自己的文件系统,而无需对内核进行修改。Fuse-2.8.6是我们今天要讨论的焦点,这是一个历史悠久且稳定的FUSE库版本。 FUSE全称为“用户...
8. **API**:FUSE API提供了一系列回调函数,如`init()`, `lookup()`, `read()`, `write()`, `unlink()`等,这些函数对应着文件系统的基本操作。 9. **调试**:FUSE支持调试模式,开发者可以通过`fuse_log_level`...
在开源的世界里,FUSE(File System in Userspace)是一个极具创新性的技术,它允许非特权用户在Linux操作系统上实现自己的文件系统,无需修改内核代码。标题中的"fuse-2.9.4.tar.gz"正是这个关键项目的源码压缩包,...
无论是为了学习还是实际项目需求,掌握FUSE都能大大提升你在Linux环境下的文件系统开发能力。通过深入研究提供的示例代码和文档,你将能够自如地驾驭这一强大的工具,创造出具有创新性的文件系统解决方案。
FUSE允许非特权用户创建自定义文件系统,无需修改内核代码。 在安装Rclone之前,确保你的Linux系统已经安装了FUSE。如果没有,可以通过以下命令安装(这里以Ubuntu为例): ```bash sudo apt-get update sudo apt-...
3. **Fuse API**:使用Fuse,开发者需要实现一系列的回调函数,这些函数对应于标准的文件系统操作。例如,`fuse_operations`结构体定义了一系列的函数指针,包括opendir(), readdir(), mkdir(), unlink(), open(), ...
FUSE(Filesystem in Userspace)是一种机制,允许非特权用户创建自己的文件系统,而无需修改内核代码或获得超级用户权限。FUSE的核心设计是将文件系统的实现从内核空间移到用户空间,通过一个简单的API和内核模块来...
在Windows平台上,FUSE(Filesystem in Userspace)是一种实现用户模式文件系统的方法,它允许开发者在不修改内核的情况下创建自定义的文件系统。FUSE最初是为Linux设计的,但通过Dokan这样的库,它也能够在Windows...
3. 文件系统转换:Fuse可以用于转换文件系统格式,例如将不支持的文件系统格式转换为Linux下的常见格式。 4. 加密文件系统:通过在用户空间实现加密逻辑,Fuse可以用于创建加密的透明文件系统。 六、Fuse的优点与...
标题中的“Go-Go的一个跨平台FUSE库”指的是一个使用Go编程语言实现的库,它允许开发者在不同的操作系统平台上,如OSX、Linux和Windows,构建文件系统接口(File System in Userspace,简称FUSE)。FUSE是一个开源...
在IT行业中,FUSE(Filesystem in Userspace)是一个非常重要的工具,它允许用户在Linux系统上实现自定义的文件系统。FUSE这个名字本身就是“文件系统在用户空间”的首字母缩写,它打破了传统文件系统必须在内核空间...
在Linux系统中,Python-Zero作为一个FUSE文件系统被挂载到一个特定的目录下,用户可以通过这个目录像操作普通文件系统一样访问云存储。在其他操作系统(如macOS或Windows)中,可能需要相应的适配器或模拟层来实现...
4. **Windows API**:由于WinFsp运行在Windows环境下,因此需要对Windows API有深入理解,以便正确地处理I/O请求、线程同步、内存管理等。 5. **安全性**:在用户空间创建文件系统可以降低安全风险,因为不需要修改...
标题中的“fuse-onedrive”指的是一个开源项目,它允许用户将Microsoft OneDrive与Linux操作系统集成,通过FUSE(File System in Userspace)技术在Linux上实现对OneDrive的本地挂载。FUSE是一个库,它使用户能够在...
Ext2.2 API中文文档是针对Linux操作系统中Ext2文件系统的开发者参考资料,它详细阐述了如何与这个文件系统进行交互,以及如何利用编程接口(API)进行相关操作。Ext2,全称为Second Extended File System,是Linux最...
在Linux操作系统中,FUSE允许用户在用户空间实现文件系统的功能,而无需修改内核。arvados_fuse正是利用了这一特性,将Arvados的云存储能力转化为一个可挂载的本地文件系统。 **arvados_fuse的核心功能** 1. **...
FUSE是一个用于Linux的库,它提供了一个接口,让开发者可以编写用户空间的文件系统,而无需编写内核模块。FUSE通过系统调用将文件系统操作重定向到用户空间程序,简化了文件系统开发的复杂性。cpp-GCSF利用FUSE来...
FUSE是一个开源库,为Linux、macOS和FreeBSD等操作系统提供了一个接口,让用户空间的应用程序可以实现自己的文件系统,而无需修改内核代码。 在描述中提到的“Plexdrive”是Go-Plexdrive的别名,同样实现了将Google...