在MSVC中与pread/pwrite相当的函数是什么?

5
3个回答

5

在C运行时库层面上,查看freadfwritefseek

在Win32 API级别上,可以查看ReadFileWriteFileSetFilePointer。MSDN对文件I/O API有广泛的覆盖。
请注意,ReadFile和WriteFile都需要一个OVERLAPPED结构参数,它允许您指定文件偏移量。即使以同步(即非“重叠”)I/O打开,也会针对支持字节偏移的所有文件尊重偏移量。

根据你所要解决的问题,文件映射可能是更好的设计选择。


除了文件映射之外,这些调用与文件位置无关。我认为文件映射有点偏离主题,但也需要考虑。 - Matt Joiner
3
ReadFile/WriteFile函数需要传入一个OVERLAPPED参数,用于指定你所感兴趣的文件偏移量。不要被OVERLAPPED类型名称所迷惑——即使是对于同步I/O打开的文件,该偏移量也会被考虑在内。 - Oren Trutner

1
似乎您只是使用 lpOverlapped 参数来ReadFile/WriteFile,并传递一个指向具有偏移量的 OVERLAPPED 结构的指针,该偏移量在 OffsetOffsetHigh 中指定。

(注:除非使用了 FILE_FLAG_OVERLAPPED 标记打开句柄,否则实际上不会出现重叠的 IO。)


1

Oren提供的答案似乎是正确的,但似乎不符合需求。实际上,我也在这里搜索答案,但没有找到。所以,我在这里更新一下。

如上所述,在C运行时库级别上,有freadfwritefseek

在Win32 API级别上,我们可以有两个抽象级别。一个在较低级别工作,它使用文件描述符,另一个在较高级别工作,它使用Windows定义的数据结构,如文件和句柄

如果您想要处理文件和句柄,可以使用 ReadFileWriteFileSetFilePointer。但是大多数 C++ 开发人员更喜欢使用文件描述符进行操作。为此,您可以使用 _read_write_lseek


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接