【发布时间】:2010-12-21 14:24:16
【问题描述】:
我已经使用 FUSE 实现了一个basic filesystem,实现了所有可预见的 POSIX 功能 [当然,我什至还没有分析过 ;)]。目前,我能够在常规文件(st_mode & S_IFREG) 上运行文件系统,但下一步的开发是将其托管在实际的块设备上。按原样运行我的代码,在设备上调用fstat 后立即读取st_size 失败。当然,我不希望问题就此止步:
- 与常规文件相比,在块设备上操作需要哪些更改?
- 在性能、限制、特殊功能等方面我需要特别注意哪些事项?
- 是否有处理块特殊文件的教程和参考资料?谷歌搜索几乎没有用处。我只有背景知识(讽刺的是,在我黑暗的过去来自 MSDN)和联机帮助页中的一些信息。
更新0
- 我已经指出了“常规文件”的含义。
- 我不想专注于获取设备大小,我想了解常规文件和设备文件在性能和使用方面的差异的一般准则。
【问题讨论】:
-
我想不出任何理由读取传递给 fstat 的地址的结构的 st_size 成员无论如何都会使程序崩溃,除非内核有错误并且没有检查在系统调用中正确访问该内存的权限,但在 MMU 捕获它时在应用程序中。
-
这可能只是与块设备问题间接相关——仅仅因为它适用于常规文件并不意味着它没有细微的错误。请发布分配您的 stat 结构、调用 fstat() 并读取 st_size 的代码。
标签: c linux filesystems fuse block-device