我有一种只有文件句柄(FILE *)的阅读器。 另一个进程继续写入我无法控制的同一个文件。
现在,由于其他进程将图像附加到该文件,很可能很快文件大小将超过4 GB。
读者进程使用图像文件的句柄,偏移量和长度读取该文件,该文件可以从某个DB中找到。
我的问题是读者如何能够读取4GB大小后文件中的块。
我正在使用Win32机器。
编辑: 我也在使用FreeBSD机器。
答案 0 :(得分:5)
只需在Windows上使用标准C API,fread
,fwrite
就可以正常使用大文件。您需要_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位。