我正在尝试实现一个FUSE驱动程序。
我所做的,是用您自己的函数覆盖的基本操作,并且我添加了cout << operation << path << endl;
所以我可以看到调用哪个操作。这是我的open
函数:
int Router::open(const char *path, struct fuse_file_info *fi) {
std::cout << "open " << path << std::endl;
return 0;
}
这将返回0
,因此open应始终成功。
然后,这是我的read
函数:
int Router::read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) {
std::cout << "read " << path << "Size: " << size << "Offset: " << offset << std::endl;
buf[0] = 'h';
buf[1] = '\0';
return 2;
}
这应该通过h\0
复制到缓冲区。
但是当我这样做时:cat myfile
它运行我的open()
函数,该函数成功,然后它运行我的read()
函数,但cat的输出什么都没有。它应该输出h
但不是。{我做错了什么?
另外我发现在OSX下,完全相同的代码只运行open
函数,但从不运行read()
可能是什么问题?
答案 0 :(得分:1)
所以我的问题是在函数中:getattr(...)
我没有指定文件大小。
完成后:st->st_size = 4096;
一切正常:)