我在保险丝中实现readdir()
功能时遇到了一个奇怪的问题。基本上当我在保险丝中的任何目录上ls
时,我会收到如下错误:
#ls
ls:读取目录。:输入/输出错误
file1.c file2.c
但奇怪的是,readdir()
正在做它应该做的事情。在某个意义上,在该特定目录中,我有两个名为file1.c
和file2.c
的文件,它能够正确读取它。
在调试问题时,我注意到fuse filler
函数(fuse_fill_dir_t
作为参数传递给readdir()
)可能导致此错误。
这是因为如果我只使用调试printf
打印目录的内容而不使用填充函数返回内容,我就看不到错误。
但是一旦我开始使用填充函数返回内容,我就会开始看到这个错误。
我有两个与此相关的问题:
1)任何人都知道为什么filler
函数可能导致这个问题?
2)如何查找fuse_fill_dir_t
函数的代码定义?我已经通过这种论证查看了大多数保险丝功能,但直到现在都没有运气。
感谢任何帮助!
干杯, Vinay
答案 0 :(得分:1)
此类消息可能是由对getxattr()
等其他(可能未实现的)FUSE回调的调用失败引起的。然后调用readdir()
并获得正确的结果。
您可以使用密钥-d
(调试模式)调试运行其可执行文件的FUSE文件系统,该程序不会进行守护进程并打印有关FUSE调用的详细调试输出。
此外,知道你的平台是什么(Linux / OS X /等)会很好。