lpNumberOfBytesWritten

lpNumberOfBytesWritten

MSDN说,



对于文件或套接字(而不是管道),当我同时调用函数 时,可以* lpNumberOfBytesWritten小于nNumberOfBytesToWrite(结果为TRUE)。

如果是这样,为什么(以及何时)相应的驱动程序会像这样完成IRP?

当我看到下面的代码时,我总是担心“如果* lpNumberOfBytesWritten

BOOL fOk = WriteFile(hFileOrSocket, ...); // Synchronously
if (fOk)
{
  // It assumes everything is fine
}

我不用担心吗?

最佳答案

AFAIK如果打开文件句柄进行同步写入-您描述的情况(*lpNumberOfBytesWritten < BytesToWritten)将永远不会发生。

部分写入的全部目的是让您有机会在失败之前写入部分数据,例如WSAEWOULDBLOCK或类似错误。异步I/O模型说,请尽可能多地写入,直到遇到适当的错误为止,然后再等待某些I/O完成。

不要与重叠的I/O混淆。您可以在那里安排I/O,并异步完成(由基础驱动程序完成)。

10-04 14:15