我可以使用标准库在C中寻找超过2GB的位置吗?



我正在制作一个用c读取磁盘映像的程序。我试图使某些东西可移植,所以我不想使用太多特定于操作系统的库。我知道有许多磁盘映像是非常大的文件,但我不确定如何支持这些文件。

我已经阅读了fseek,它似乎使用不保证支持超过231-1的值的long intfsetpos似乎支持fpos_t更大的值,但不能确定绝对位置。我也考虑过使用fseek的几个相对搜索,但我不确定这是否可移植。

我如何在C中支持可移植的大文件?

没有可移植的方法。

在Linux上有fseeko()ftello(),对(需要一些定义,检查ftello())。

在Windows上,我相信你必须使用_fseeki64()_ftelli64()

#ifdef是你的朋友

pread()可以在任何posix兼容的平台(OS X, Linux, BSD等)上工作。这在Windows上是没有的,但Windows有很多标准的东西是错误的;这将不是你的代码库中唯一需要Windows特殊情况的东西。

你不能在标准c中做到这一点,即使使用相对查找,在某些体系结构中也是不可能的。

一种方法是在编译时检查平台。您可以只检查LONG_MAX的值,如果它不够大就抛出编译错误。但是,即使这样也不能保证底层文件系统支持大于2或4GB的文件。

一个更好的方法是使用编译器提供的预处理器宏来检查您的代码正在编译的操作系统,并编写特定于操作系统的操作系统。操作系统应该提供一种方法来检查文件系统是否实际支持大于2GB或4GB的文件。

相关内容

  • 没有找到相关文章

最新更新