保险丝:是否可以在通话之间保存信息?

fuse: is it possible to save information between calls?

我正在研究基于熔断器的 FS。它可用于从 git 发布 (RO) branch/revision/tag(跟踪....你移动一个分支,FS 得到刷新)......开发的早期阶段,以防万一。 ...我使用 libgit2.

https://github.com/eantoranz/gitmod

我在想,在填充文件内容的过程中,如果文件足够大,我可能会多次调用 .read。目前,我没有使用任何缓存,所以对于发出的每个请求,我都会打开被请求的对象,然后填充缓冲区。这种方法存在多个问题:

如果我能够在对 .read 的调用之间保存我正在使用的对象,那么我就不需要多次打开该对象,至少文件的内容甚至是一致的如果过时(下次尝试读取文件时将获得正确的内容)...所以。我签入了 https://libfuse.github.io/doxygen/structfuse__file__info.html,但我认为其中没有任何类似 (void *) 的东西可以用来在调用之间保存信息。我看到有 fh 但它是一个 ID,并不是我真正需要的。

fuse 中是否还有其他技巧可以实现此目的?

您应该使用 open 调用将上下文存储在 fi->fh(文件句柄)中。这是一个 int64,你可以转换成任何东西,void * 替代。

https://github.com/libfuse/libfuse/blob/master/example/passthrough.c#L293