6

readdir()在 fuse 中实现功能时,我看到了一个奇怪的问题。基本上,当我ls在 fuse 中的任何目录上执行操作时,都会收到错误消息,例如:

# ls
ls: 读取目录 .: 输入/输出错误
file1.c file2.c

但奇怪的是,readdir()正在做它应该做的事情。从某种意义上说,在该特定目录中,我有两个名为file1.c并且file2.c它能够正确读取它的文件。

在调试问题时,我注意到 fusefiller函数(fuse_fill_dir_t作为参数传递给readdir())可能是导致此错误的原因。

这是因为如果我只是使用调试打印目录的printf内容而不使用填充函数返回内容,我看不到错误。

但是一旦我开始使用填充函数返回内容,我就开始看到这个错误。

我有两个与此相关的问题:

1)有人知道为什么该filler功能可能导致此问题吗?

2)如何查找函数代码的定义fuse_fill_dir_t?我已经查看了大多数带有这种参数的保险丝函数,但直到现在都没有运气。

任何帮助表示赞赏!

干杯,维奈

4

1 回答 1

1

此类消息可能是由于对其他(可能未实现)FUSE 回调(如getxattr(). 然后readdir()被调用并获得正确的结果。

您可以使用密钥(调试模式)调试运行其可执行文件的 FUSE 文件系统-d,它不会守护进程并打印有关 FUSE 调用的详细调试输出。

此外,很高兴知道您的平台是什么(Linux/OS X/等)。

于 2012-06-13T17:22:06.640 回答