开发者

Equivalent to pread/pwrite in MSVC?

开发者 https://www.devze.com 2023-01-19 01:41 出处:网络
What calls best emulate pread/pwr开发者_开发知识库ite in MSVC 10?At the C runtime library level, look at fread, fwrite and fseek.

What calls best emulate pread/pwr开发者_开发知识库ite in MSVC 10?


At the C runtime library level, look at fread, fwrite and fseek.

At the Win32 API level, have a look at ReadFile, WriteFile, and SetFilePointer. MSDN has extensive coverage of file I/O API's.

Note that both ReadFile and WriteFile take an OVERLAPPED struct argument, which lets you specify a file offset. The offset is respected for all files that support byte offsets, even when opened for synchronous (i.e. non 'overlapped') I/O.

Depending on the problem you are trying to solve, file mapping may be a better design choice.


It looks like you just use the lpOverlapped parameter to ReadFile/WriteFile to pass a pointer to an OVERLAPPED structure with the offset specified in Offset and OffsetHigh.

(Note: You don't actually get overlapping IO unless the handle was opened with FILE_FLAG_OVERLAPPED.)


The answer provided by Oren seems correct but doesn't seem to meet the needs. Actually, I too was here for searching the answer but couldn't find it. So, I will update a bit here.

As said,

At the C runtime library level, there are fread, fwrite and fseek.

At the Win32 API level, we can have two level of abstractions. One at the lower level which works with file descriptors and other at higher level which works with Windows' defined data structures such as File and Handle.

If you wish to work with Files and Handles, you have ReadFile, WriteFile, and SetFilePointer. But most the time, C++ developers prefer working with File Descriptors. For that, you have _read, _write and _lseek.

0

精彩评论

暂无评论...
验证码 换一张
取 消