【发布时间】: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