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

标签 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()

可能是什么问题?

最佳答案

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

关于c++ - Fuse C++ 驱动程序 - read() 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41220850/

相关文章:

c++ - 有没有办法在 for 循环初始值设定项中定义两种不同类型的变量?

C++ O2 在类中使用 const 引用文字时出现内存泄漏

linux - 在不中断的情况下读取生活过程内存

python - 如何在azure上的同一云服务中部署多台机器

c - fallocate() 做什么?

macos - 用于获取 DMG 的首选 block 大小的 API

javascript - 你会在你的应用程序中嵌入哪个 Javascript 引擎?

c++ - 在类模板定义中使用模板名称代替模板标识

linux - 如何创建开发环境已经在本地服务器创建了QA和舞台环境?

image - 存储大量图像