【问题标题】:FUSE (Bazil-Go): how to implement MkDir request?FUSE (Bazil-Go):如何实现 MkDir 请求?
【发布时间】:2018-08-24 16:17:56
【问题描述】:

我正在尝试在用 Go 编写的熔断器中实现函数 mkdir,并且我正在使用 Bazil library。我已经成功实现了一个简单的只读 fs,现在我希望能够在任何现有目录中调用 mkdir 来创建一个新目录。

我已确保所有现有目录都是可写的,(attr.Mode = os.ModeDir | 0777)。 现在我刚刚添加了这个功能:

func (d Dir) MkDir(ctx context.Context, req *fuse.MkdirRequest) (fs.Node, error) {
    dir := &Dir{name: req.Name, files: 0, inode: 10 /*a random inode*/,mode: os.FileMode(0777),nextdir: nil, nextfile: nil}
    d.nextdir = dir
    return dir, nil
}

在我自己对 Bazil 库的 hello fs example 的实现中。但这似乎没有任何区别。

当我从终端调用 mkdir new_dir_name 时,我收到错误:“mkdir: cannot create directory ‘new_dir_name’: Operation not allowed”,即使我添加了 mkdir 函数。

任何关于为什么会发生这种情况的见解,以及我应该在我的代码中添加什么以使其正常工作都会很棒。另外,这是我的第一个 stackoverflow 问题,如果我没有明确地提问,我很抱歉。

【问题讨论】:

  • 可能是您的父目录的访问模式有问题,因为您将新目录附加到传入的d.nextdir = dir
  • 我没有显示这个:d.nextdir 是一个指向 Dir 结构类型的指针,就像一个链表。在将属性(包括模式)分配给任何目录时,我将 os.filemode 设置为 0777

标签: go mkdir fuse


【解决方案1】:

像这样生成目录的正确函数

func (d *Dir) Mkdir(ctx context.Context, req *fuse.MkdirRequest) (fs.Node, error) {

}

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2019-03-30
    • 2011-05-17
    • 2014-08-05
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多