Fuse C ++驱动程序 - read()实现

时间:2016-12-19 10:46:25

标签: c++ linux filesystems driver fuse

我正在尝试实现一个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()

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

所以我的问题是在函数中:getattr(...)我没有指定文件大小。 完成后:st->st_size = 4096;一切正常:)