C:读取大于 4 GB 的文件

标签 c file freebsd

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

现在,随着其他进程将图像附加到该文件,文件大小可能很快就会超过 4 GB 的限制。

读取器进程使用图像文件的句柄、偏移量和长度读取该文件,这些可以从一些数据库中找到。

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

我在 Win32 机器上工作。

编辑: 我也在 FreeBSD 机器上工作。

最佳答案

只需在 Windows 上使用标准 C API,freadfwrite 就可以很好地处理大文件。您将需要 _fseeki64 来查找 64 位位置。

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

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

关于C:读取大于 4 GB 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565145/

相关文章:

c - 强制 fgets 阻塞(即伪造 "interactive device")

c - K&R C 练习 1-9 *几乎*解决

iOS iPod API - 获取实际的歌曲文件

java - Android 无法在 SD 卡上执行 mkdir()

python - postgres 插入规则而不是更新

c++ - CUDA C和C++的解释

Django + Apache - file.open() 权限被拒绝

linux - Bash:检测所有磁盘并显示可用空间

java - 无法在 FreeBSD 上运行 java 文件(java.net.SocketException Invalid argument)

c - usbnet 驱动程序和网络子系统