C:读取>的文件。 4GB

时间:2011-07-03 19:43:03

标签: c file freebsd

我有一种只有文件句柄(FILE *)的阅读器。 另一个进程继续写入我无法控制的同一个文件。

现在,由于其他进程将图像附加到该文件,很可能很快文件大小将超过4 GB。

读者进程使用图像文件的句柄,偏移量和长度读取该文件,该文件可以从某个DB中找到。

我的问题是读者如何能够读取4GB大小后文件中的块。

我正在使用Win32机器。

编辑: 我也在使用FreeBSD机器。

2 个答案:

答案 0 :(得分:5)

只需在Windows上使用标准C API,freadfwrite就可以正常使用大文件。您需要_fseeki64才能找到64位的位置。

您也可以使用普通的WinAPI(ReadFile等),它也可以毫无问题地处理> 4 GiB文件。

[编辑]:你真正需要的只是64位搜索,ReadFile通过OVERLAPPED结构提供(正如一些评论者提到的那样)。你当然也可以通过使用SetFilePointer,相当于_fseeki64。阅读/写作从来都不是问题,无论文件大小,只是寻求。

答案 1 :(得分:2)

在FreeBSD上,stdio API不限于32位(4Gb)。

只要使用64位整数来操纵偏移量和长度,读取过去4Gb就没有问题。

如果您正在寻找FILE *,如果您使用的是32位主机,则必须使用fseeko()而不是fseek()。 fseek()在32位机器上占用32位长。 fseeko()采用off_t类型,在所有FreeBSD架构上都是64位。