`
湖大-软件-杨锦涛
  • 浏览: 7425 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

linux 下fuse API修改

阅读更多

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.9.0.tar.gz

    1. **源代码**:供开发者编译和修改FUSE库的C语言源代码。 2. **头文件**(headers):提供给应用程序开发者使用的接口定义。 3. **Makefile**:编译和安装FUSE的指令。 4. **文档**:可能包括README文件、INSTALL...

    fuse-2.8.0.tar.gz

    FUSE(Filesystem in Userspace)是一个开源的Linux内核模块,它允许普通用户在Linux系统上实现自己的文件系统,而无需对内核代码进行修改。Fuse-2.8.0是该系统的某一版本,发布于2009年,为用户提供了一种灵活的...

    fuse-2.8.6.tar.gz

    FUSE(Filesystem in Userspace)是一种独特的技术,它允许用户在用户空间实现自己的文件系统,而无需对内核进行修改。Fuse-2.8.6是我们今天要讨论的焦点,这是一个历史悠久且稳定的FUSE库版本。 FUSE全称为“用户...

    fuse-2.9.8.tar.gz

    8. **API**:FUSE API提供了一系列回调函数,如`init()`, `lookup()`, `read()`, `write()`, `unlink()`等,这些函数对应着文件系统的基本操作。 9. **调试**:FUSE支持调试模式,开发者可以通过`fuse_log_level`...

    fuse-2.9.4.tar.gz

    在开源的世界里,FUSE(File System in Userspace)是一个极具创新性的技术,它允许非特权用户在Linux操作系统上实现自己的文件系统,无需修改内核代码。标题中的"fuse-2.9.4.tar.gz"正是这个关键项目的源码压缩包,...

    fuse-2.6.5

    无论是为了学习还是实际项目需求,掌握FUSE都能大大提升你在Linux环境下的文件系统开发能力。通过深入研究提供的示例代码和文档,你将能够自如地驾驭这一强大的工具,创造出具有创新性的文件系统解决方案。

    linux下 Rclone+Alist实现挂载网盘(天翼云盘为例)

    FUSE允许非特权用户创建自定义文件系统,无需修改内核代码。 在安装Rclone之前,确保你的Linux系统已经安装了FUSE。如果没有,可以通过以下命令安装(这里以Ubuntu为例): ```bash sudo apt-get update sudo apt-...

    基于fuse的简单文件系统实现

    3. **Fuse API**:使用Fuse,开发者需要实现一系列的回调函数,这些函数对应于标准的文件系统操作。例如,`fuse_operations`结构体定义了一系列的函数指针,包括opendir(), readdir(), mkdir(), unlink(), open(), ...

    linux_kernel_fuse_源码剖析解析.docx

    FUSE(Filesystem in Userspace)是一种机制,允许非特权用户创建自己的文件系统,而无需修改内核代码或获得超级用户权限。FUSE的核心设计是将文件系统的实现从内核空间移到用户空间,通过一个简单的API和内核模块来...

    cpp-windows的用户模式文件系统利用FUSE进行封装

    在Windows平台上,FUSE(Filesystem in Userspace)是一种实现用户模式文件系统的方法,它允许开发者在不修改内核的情况下创建自定义的文件系统。FUSE最初是为Linux设计的,但通过Dokan这样的库,它也能够在Windows...

    参考资料-关于Fuse相关的培训资料.zip

    3. 文件系统转换:Fuse可以用于转换文件系统格式,例如将不支持的文件系统格式转换为Linux下的常见格式。 4. 加密文件系统:通过在用户空间实现加密逻辑,Fuse可以用于创建加密的透明文件系统。 六、Fuse的优点与...

    Go-Go的一个跨平台FUSE库

    标题中的“Go-Go的一个跨平台FUSE库”指的是一个使用Go编程语言实现的库,它允许开发者在不同的操作系统平台上,如OSX、Linux和Windows,构建文件系统接口(File System in Userspace,简称FUSE)。FUSE是一个开源...

    FUSE-的选择.zip

    在IT行业中,FUSE(Filesystem in Userspace)是一个非常重要的工具,它允许用户在Linux系统上实现自定义的文件系统。FUSE这个名字本身就是“文件系统在用户空间”的首字母缩写,它打破了传统文件系统必须在内核空间...

    Python-Zero由云存储和透明本地硬盘缓存支持的Fuse文件系统

    在Linux系统中,Python-Zero作为一个FUSE文件系统被挂载到一个特定的目录下,用户可以通过这个目录像操作普通文件系统一样访问云存储。在其他操作系统(如macOS或Windows)中,可能需要相应的适配器或模拟层来实现...

    cpp-WindowsFileSystemProxy在Windows中提供类似FUSE的功能

    4. **Windows API**:由于WinFsp运行在Windows环境下,因此需要对Windows API有深入理解,以便正确地处理I/O请求、线程同步、内存管理等。 5. **安全性**:在用户空间创建文件系统可以降低安全风险,因为不需要修改...

    fuse-onedrive:Microsoft OneDrive 的 FUSE 模块

    标题中的“fuse-onedrive”指的是一个开源项目,它允许用户将Microsoft OneDrive与Linux操作系统集成,通过FUSE(File System in Userspace)技术在Linux上实现对OneDrive的本地挂载。FUSE是一个库,它使用户能够在...

    Ext2.2-API中文文档

    Ext2.2 API中文文档是针对Linux操作系统中Ext2文件系统的开发者参考资料,它详细阐述了如何与这个文件系统进行交互,以及如何利用编程接口(API)进行相关操作。Ext2,全称为Second Extended File System,是Linux最...

    PyPI 官网下载 | arvados_fuse-0.1.1403276738.c9c800c.tar.gz

    在Linux操作系统中,FUSE允许用户在用户空间实现文件系统的功能,而无需修改内核。arvados_fuse正是利用了这一特性,将Arvados的云存储能力转化为一个可挂载的本地文件系统。 **arvados_fuse的核心功能** 1. **...

    cpp-GCSF一个基于GoogleDrive的FUSE文件系统

    FUSE是一个用于Linux的库,它提供了一个接口,让开发者可以编写用户空间的文件系统,而无需编写内核模块。FUSE通过系统调用将文件系统操作重定向到用户空间程序,简化了文件系统开发的复杂性。cpp-GCSF利用FUSE来...

    Go-Plexdrive允许你将GoogleDrive账号挂载成fuse文件系统

    FUSE是一个开源库,为Linux、macOS和FreeBSD等操作系统提供了一个接口,让用户空间的应用程序可以实现自己的文件系统,而无需修改内核代码。 在描述中提到的“Plexdrive”是Go-Plexdrive的别名,同样实现了将Google...

Global site tag (gtag.js) - Google Analytics