我在实现 readdir()
时看到一个奇怪的问题 fuse 中的功能。基本上当我做 ls
在 fuse 中的任何目录上,我收到一个错误,例如:
# ls
ls: reading directory .: Input/output error
file1.c file2.c
但奇怪的是,
readdir()
正在做它应该做的事情。从某种意义上说,在该特定目录中,我有两个名为 file1.c
的文件。和 file2.c
它能够正确读取它。在调试问题时,我注意到 fuse
filler
函数( fuse_fill_dir_t
作为参数传递给 readdir()
)可能是导致此错误的原因。这是因为如果我只是使用调试
printf
打印目录的内容不使用填充函数返回内容,我看不到错误。但是一旦我开始使用填充函数返回内容,我就开始看到这个错误。
我有两个与此相关的问题:
1) 任何人都知道为什么
filler
函数可能导致这个问题?2) 如何查找
fuse_fill_dir_t
的代码定义功能?我已经查看了大多数带有这种参数的 fuse 函数,但直到现在都没有运气。任何帮助表示赞赏!
干杯,
维奈
最佳答案
此类消息可能是由于对其他(可能未实现的)FUSE 回调的调用失败引起的,例如 getxattr()
.然后readdir()
被调用并获得正确的结果。
您可以使用 key -d
调试运行其可执行文件的 FUSE 文件系统。 ( Debug模式),- 不守护进程并打印有关 FUSE 调用的详细调试输出。
另外,很高兴知道您的平台是什么(Linux/OS X/etc)。
关于filesystems - 为什么 FUSE readdir 返回输入/输出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6692601/