当前位置:首页 > 开发 > 开源软件 > 正文

linux 下fuse API修改

发表于: 2014-08-02   作者:湖大-软件-杨锦涛   来源:转载   浏览:
摘要: fuse的API修改 这里的fuse API基于python进行修改fuse的安装请参照fuse的安装博客   在你挂载的目录下你进行的操作才会调用到的FUSE的文件系统,例如,你将/usr 挂载到了/opt/fuse下面,当你进入/opt/fuse下以后你使用的指令才是你写的文件系统的指令 这些指令不光是由一个fuse的函数执行而是由多个函数共同实现的 如:cd 操作调用到的

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])

 

 

linux 下fuse API修改

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
默认登录mysql之后可以通过SHOW VARIABLES语句查看系统变量及其值。   mysql> show variables
Linux各发行版中SSH端口默认为22,如果正式做站或其它用途,为了提高安全性就需要修改掉默认的SSH端
  红帽系列的Linux发行版主机名存放位置是/etc/sysconfig/network,Ubuntu Linux主机名存放位置是
FUSE 的工作原理如图所示。假设基于 FUSE 的用户态文件系统 hello 挂载在 /tmp/fuse 目录下。当应用
用户空间文件系统( Filesystem in Userspace,简称 FUSE)是 操作系统中的概念,指完全在用户态实
有时候因为编码需要修改mysql的编码,windows下修改有图文界面简单一些,linux大家就可以参考下面的
1,安装好之后,授权的用户是没有密码的,使用#mysql命令则可以登录,为了安全我们需要设置一个密码
使用root用户进行登录或者拥有root权限 1.修改IP:输入如下命令,直接修改ifcfg-eth0文件中的ip即可
ethtool 工具有一个-E 指令, 可以通过此指令修改网卡的eeprom. 前提是此网卡驱动编写了ethtool驱动
ethtool 工具有一个-E 指令, 可以通过此指令修改网卡的eeprom. 前提是此网卡驱动编写了ethtool驱动
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号