我正在尝试为readdir()中的每条记录填充一个stat结构,并通过filler()将相应的stat传递给getattr。 I read somewhere FUSE只在readdir中填充时才识别stat结构的某些字段(相切问题:总是这样吗?)。显然,这些被接受的字段之一是st_ino。但是,当我在readdir()中为给定记录填充stat结构的st_ino时,我在getattr()中看不到该记录的相应更改。
也许值得注意的是,我试图用上述问题解决的问题是我想在每个记录的基础上将readdir中的(非POSIX)信息传递给getattr。最初,我的黑客是将每个记录名称附加一个唯一标识符,该记录名称作为包含此(非POSIX)信息的数据库的主键。该解决方案的问题在于用户在发出'ls'时会看到时髦的命名方案。如果我可以将这个主键存储在st_ino字段中,那么我可以唯一地识别记录而无需用户看到命名方案。所以我想这个问题的另一个解决方案是找到一种方法来改变readdir填充记录缓冲区的名称,其名称是ls打印到屏幕上。但是,我不确定在没有修改FUSE源的情况下是否可行。
感谢任何帮助!
答案 0 :(得分:1)
很久以前我写了一些FUSE文件系统,这对我来说有点模糊。但是,当我查看旧代码时,我发现FUSE允许private_data字段。您可以根据需要管理private_data中的信息。这应该提供一种机制,用于将信息从readdir传输到getattr,而不会污染文件名空间或为特定用途保留的任何其他数据成员。