保险丝:是否可以在通话之间保存信息?
fuse: is it possible to save information between calls?
我正在研究基于熔断器的 FS。它可用于从 git 发布 (RO) branch/revision/tag(跟踪....你移动一个分支,FS 得到刷新)......开发的早期阶段,以防万一。 ...我使用 libgit2.
https://github.com/eantoranz/gitmod
我在想,在填充文件内容的过程中,如果文件足够大,我可能会多次调用 .read
。目前,我没有使用任何缓存,所以对于发出的每个请求,我都会打开被请求的对象,然后填充缓冲区。这种方法存在多个问题:
- 我需要多次打开同一个对象,并在每次调用时获取内存中的内容。
- 此外,当我仍然收到对
.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
我正在研究基于熔断器的 FS。它可用于从 git 发布 (RO) branch/revision/tag(跟踪....你移动一个分支,FS 得到刷新)......开发的早期阶段,以防万一。 ...我使用 libgit2.
https://github.com/eantoranz/gitmod
我在想,在填充文件内容的过程中,如果文件足够大,我可能会多次调用 .read
。目前,我没有使用任何缓存,所以对于发出的每个请求,我都会打开被请求的对象,然后填充缓冲区。这种方法存在多个问题:
- 我需要多次打开同一个对象,并在每次调用时获取内存中的内容。
- 此外,当我仍然收到对
.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