为什么FUSE readdir返回输入/输出错误?

时间:2011-07-14 11:43:20

标签: filesystems fuse

我在保险丝中实现readdir()功能时遇到了一个奇怪的问题。基本上当我在保险丝中的任何目录上ls时,我会收到如下错误:

  

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

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

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

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

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

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

1)任何人都知道为什么filler函数可能导致这个问题?

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

感谢任何帮助!

干杯, Vinay

1 个答案:

答案 0 :(得分:1)

此类消息可能是由对getxattr()等其他(可能未实现的)FUSE回调的调用失败引起的。然后调用readdir()并获得正确的结果。

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

此外,知道你的平台是什么(Linux / OS X /等)会很好。