用于访问稀疏文件的操作系统 API?

Posted

技术标签:

【中文标题】用于访问稀疏文件的操作系统 API?【英文标题】:Operating system API for accessing sparse files? 【发布时间】:2010-12-04 06:45:27 【问题描述】:

我至少需要测试文件中的字节范围是否确实存在或无效。

它需要在主要操作系统上运行:Unix (Linux/MacOSX/FreeBSD) 和 Windows。

我想仍然没有办法在文件中打洞,还是有一些文件系统特定的 API 和建议?这对于日志文件也非常有用。

【问题讨论】:

【参考方案1】:

在 Windows 上,您可以使用 FSCTL_GET_RETRIEVAL_POINTERS 来查找文件簇和磁盘之间的映射。

相应的 Linux(可能还有其他一些 posixes)IOCTL 是 FIBMAP

【讨论】:

这是一篇关于 FIBMAP 的博文:smackerelofopinion.blogspot.com/2009/06/… Unix 花了 5 年(或者说 45 年?)为其添加 API。它现在称为“fallocate”,适用于 linux 内核 3.16 中的几乎所有文件系统。哇,人们抱怨窗户。【参考方案2】:

我知道没有可移植的方法来测试稀疏性。要创建带孔的文件,您必须在零孔上seek(),而不是写入它们。这显然只在创建新文件或扩展旧文件时有效。在预先存在的零上使用seek() 将无济于事。

【讨论】:

以上是关于用于访问稀疏文件的操作系统 API?的主要内容,如果未能解决你的问题,请参考以下文章

什么是用于OpenEBS Jiva和cStor卷的后端文件系统?

推荐系统数据稀疏性问题

什么是稀疏文件(Sparse File)

Linux文件空洞与稀疏文件

Linux文件空洞与稀疏文件

文件系统访问 API:如何使用 postMessage 发送文件句柄?