MSDN 说,
When writing to a non-blocking, byte-mode pipe handle with insufficient buffer space, WriteFile returns TRUE with *lpNumberOfBytesWritten < nNumberOfBytesToWrite.
对于文件或套接字(不是管道),当我同步调用函数时,*lpNumberOfBytesWritten 是否小于 nNumberOfBytesToWrite(结果为 TRUE)。
如果是这样,为什么(以及什么时候)相应的驱动程序会那样完成 IRP?
当我看到下面的代码时,我总是担心“如果 *lpNumberOfBytesWritten < BytesToWrite 会怎样?”
BOOL fOk = WriteFile(hFileOrSocket, ...); // Synchronously
if (fOk)
{
// It assumes everything is fine
}
我不需要担心这个吗?
最佳答案
据我所知,如果打开文件句柄进行同步写入 - 您描述的情况 (*lpNumberOfBytesWritten < BytesToWritten
) 将永远不会发生。
部分写入的全部意义在于让您有机会在失败并出现诸如 WSAEWOULDBLOCK
之类的错误之前写入一部分数据。或类似的。异步 I/O 模型要求尽可能多地写入,直到出现适当的错误,然后等待部分 I/O 完成。
不要与重叠 I/O 混淆。您在那里安排 I/O 并异步完成(由底层驱动程序)。
关于windows - WriteFile 函数的 lpNumberOfBytesWritten 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6489518/