【发布时间】:2020-02-01 19:32:31
【问题描述】:
我想创建一个 FUSE 文件系统,它接受对文件系统内任何路径的任何类型的写入操作。有点像命名管道,但是以目录的形式。
echo test > bar # consumes "test"
echo test > bar/foo # consumes "test", even though the directory "bar" hasn't been created
echo test > x/y/z/test # consumes "test", even though the directories "x/y/z" haven't been created
我使用bazil.org/fuse 来实现。我面临的问题是,当应用程序想要写入我的文件系统中的foo/bar 时,它会检查foo 是否是一个目录,然后检查bar 是否是一个文件。不幸的是,我无法预先知道foo 应该是文件还是目录。
我的Attr 函数如下所示:
func (d *Dir) Attr(ctx context.Context, a *fuse.Attr) error {
a.Inode = 1
a.Mode = os.ModeDir | 0755
}
由于os.ModeDir,此代码特定于目录节点类型。我希望这适用于目录或文件。
有没有办法实现我想要的?
【问题讨论】:
-
您对以下写入序列有何期望:
echo test > foo/bar; echo test > foo? -
反过来呢:
echo test > foo; echo test > foo/bar? -
@Leon:这两个命令都应该正常执行,在这两种情况下,FUSE 文件系统都应该接受对一个名为
foo或foo/bar的文件的写操作。 -
这意味着在您的用例中,您只会发出写入请求而不会回读。对吗?
-
@Leon:完全正确。文件系统在内部消耗所有写入请求,但不需要读取任何内容。