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的API修改相关推荐

  1. Oracle EBS PO调用API修改一揽子发放行需求日期或数量引发单价变更

    背景:         最近,客户的用户反映批量修改或拆分一揽子发放行的需求日期或承诺日期或数量时,自动修改该发放行的单价为对应PBA行的单价. 解决方法:         通过实际数据分析.参考官方 ...

  2. WPF 调用API修改窗体风格实现真正的无边框窗体

    原文:WPF 调用API修改窗体风格实现真正的无边框窗体 WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm ...

  3. 百度地图API : 修改marker图标(icon)

    var map = new BMap.Map("map"); // 创建地图实例 var point = new BMap.Point(116.404, 39.915); // 创 ...

  4. 腾讯地图api修改信息窗口样式_DOTA2 地图编辑器指南(二):总览

    做什么地图 作为一个打算把流程讲得详细一点的教程,是不太好做什么庞大的项目的.我们的目的还是学会制作工具和熟悉制作流程,只要学会了工具,就有能力实现自己心目中的项目了.到时候更加要求的其实是创意. 所 ...

  5. 第十六节: EF的CodeFirst模式通过Fluent API修改默认协定

    一. 简介 1. 优先级:Fluent API > data annotations > default conventions. 2. 所有的Fluent API配置都要在 OnMode ...

  6. day inset_按 SetPrinter API 修改打印机设置 - Application Developer | Microsoft Docs

    使用 SetPrinter 函数修改打印机设置 03/09/2020 本文内容 该 SetPrinter 函数允许应用程序更改各种打印机属性. 但是,如本文中的代码所示,一定数量的准备工作是正确调用所 ...

  7. 百度地图API——修改infowindow样式

    前言 最近又用到了百度地图api,之前用到的是百度地图js api的写法,需要一个个定义对象,添加事件或者监控,最后画到地图上,时不时还有渲染时序不对的情况,非常的不友好.所以这次用了vue Baid ...

  8. 使用HTTP API修改Godaddy域名A记录实现DDNS

    文章目录 前言 一.场景 二.名词解释 1.什么是Godaddy? 2.什么是DDNS? 3.什么是公网IP? 4.什么是A记录? 5.什么是HTTP? 三.动手实现 1.获取API Key 2.观摩 ...

  9. c语言 程序延时 校准,Windows下C语言API修改系统时间,附自动校准时间源码

    C语言Windows时钟的结构体如下: typedef struct _SYSTEMTIME { WORD wYear;              /*年*/ WORD wMonth;         ...

最新文章

  1. SpringBoot-服务端参数验证-JSR-303验证框架
  2. 工作总结书写的意义及要求
  3. python 网站 源码_在线浏览美图源码,附带python源码
  4. 下周开幕!给深圳的嵌入式和电子工程师准备的嘉年华来了
  5. 【文末福利】如何用精密算法解决未婚妻问题?
  6. 程序员怎么看待C语言?最伟大?最落后?
  7. TensorFlow和Keras入门必读教程
  8. 铁路12306网站App服务时间延长 退票业务可24小时全天候办理
  9. VS2008异常捕获不到的问题
  10. 2020 各大厂分享ppt
  11. 2.Docker技术入门与实战 --- 核心概念与安装配置
  12. 分布式文件存储FastDFS之环境搭建篇
  13. Matlab 2016a 安装教程
  14. SharePoint下载服务器资源
  15. 引爆Spark大数据引擎的七大工具
  16. ai条码插件免安装_AI条码插件BarcodeToolbox使用说明
  17. 移植vsftpd FTP服务器到ARM-Linux系统
  18. IDEA 运行时出现 too long 异常
  19. 描述计算机内存的参数,电脑组装内存知识,你不能不知的内存参数介绍
  20. 再理解:零空间、行空间、列空间、左零空间、基础解系、极大线性无关组、齐次解、非齐次解之间的关系

热门文章

  1. Altera之VIP TPG学习笔记
  2. 折线分割平面[HDU2050]
  3. (收藏)Html相关网址
  4. perl(Class::MethodMaker) is needed by MySQL-ndb-tools-5.1.21-0.glibc23.i386
  5. 世界级版本控制工具Vault v10.0发布,多项功能改进|附下载
  6. python学习之正则表达式练习:编写一个计算器
  7. 厦门大学2016年高等代数考研试题参考解答
  8. Android应用程序请求SurfaceFlinger服务创建Surface的过程分析
  9. Eclipse中代码编辑背景颜色修改和XML字体修改
  10. android LinkedList的基本用法