我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
此类消息可能是由于对其他(可能未实现的)FUSE 回调(例如getxattr(). 然后readdir()调用并获得正确的结果。
您可以使用密钥-d(调试模式)调试运行其可执行文件的 FUSE 文件系统, - 它不会守护进程并打印有关 FUSE 调用的详细调试输出。
另外,最好知道您的平台是什么(Linux/OS X/等)。