我正在尝试实现 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()
可能是什么问题?
最佳答案
所以我的问题是在函数中:getattr(...)
我没有指定文件大小。
完成后:st->st_size = 4096;
一切正常:)
关于c++ - Fuse C++ 驱动程序 - read() 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41220850/