同步写入使用FILE_FLAG_OVERLAPPED打开的文件

时间:2011-07-12 11:40:01

标签: c file asynchronous writefile overlapped-io

我已经使用

打开了一个文件
HANDLE handle= 
    CreateFileW(
        fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 
        FILE_FLAG_OVERLAPPED, NULL);

然后将文件句柄用于异步读取操作:

ReadFile(handle, buffer, 1, NULL, &overlapped);

这很有效。但是,我现在想做同步写。 WriteFile文档说明了

  

如果使用FILE_FLAG_OVERLAPPED打开hFile,则以下条件有效:
  •lpOverlapped参数必须指向有效且唯一的OVERLAPPED结构,否则该函数可能会错误地报告写操作已完成。

如果省略lpOverlapepd参数,则ERROR_INVALID_PARAMETER会返回GetLastError()。打开两个句柄,一个用于读取,一个用于写入也不起作用,因为第二个句柄产生ERROR_ACCESS_DENIED错误。

如何打开异步读取和同步写入的文件?我不想不必要地增加代码复杂性。

2 个答案:

答案 0 :(得分:2)

可以通过为写入操作创建手动复位事件,写入文件(使用重写结构中的事件进行写入操作)然后立即等待事件来实现同步写入。

根据您的异步读取是否需要与写入异步,您可能需要确保使用兼容的等待,以便可以调用读取完成例程,否则将进行读取并将数据存储在缓冲区,但你无法处理它。

答案 1 :(得分:0)

打开两个句柄,一个用于异步读取另一个用于同步写入,只需确保设置文件共享属性(FILE_SHARE_READ|FILE_SHARE_WRITE)。没有测试过。