我正在尝试实现一个FUSE文件系统,并在阅读后.我想我已经找到了如何实现它.我会说明我对实施的想法.如果对或错,请告诉我.
一个实现文件系统需要使用任何人认为合适的函数(比如getmptr函数的xmp_getattributes)实现的操作,然后将这些函数映射到fuse_operations类型的结构中的相应函数.
static struct fuse_operations xmp_oper =
{
.getattr = xmp_getattributes,
//more declarations...
};
现在,如果我使用类ExFuse来实现FUSE文件系统,并且我有一个方法ExFuse :: getAttributes,它在实现中完成getattr的工作.然后,我的声明将改为
static struct fuse_operations xmp_oper =
{
.getattr = ExFuse::getAttributes,
//more declarations...
};
我对么?另外,有没有其他方法在C中实现FUSE,这比静态结构声明更好?
解决方法:
if I have used a class
ExFuse
to implement a FUSE filesystem and I have a methodExFuse::getAttributes
which does the job ofgetattr
in the implementation. Then, my declaration would change as
static struct fuse_operations xmp_oper =
{
.getattr = ExFuse::getAttributes,
//more declarations...
};
这是错的. FUSE需要一个指向函数的指针,但ExFuse :: getAttributes是一个指向成员方法的指针(因为你没有明确说它是一个静态方法,我只能假设它是一个成员方法). They are not the same thing.
您需要使用普通函数或静态方法.
is there any other way of implementing FUSE in C++ which is better than the static struct declaration?
恐怕不是. FUSE是用C语言编写的,希望你坚持使用“C方式”.就公共接口而言,这对于使用C范例几乎没有余地(当然,只要你不扔,你可以在私有实现中做你想做的事,但这对你没有帮助你把接口写到FUSE).