windows - WriteFile 函数的 lpNumberOfBytesWritten 参数

标签 windows sockets winapi file-io filesystems

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/

相关文章:

c++ - 我怎样才能得到一个程序的状态?

windows - Windows 中的进程间条件变量

c# - SetWindowPos/MoveWindow 持续存在问题

windows - Windows播放声音的最低级别的功能是什么?

.net - Windows 窗体 DataGridView 的 ItemDataBound?

windows - Copy-Item 使用凭据将文件从本地复制到远程服务器

java - 使用套接字处理生物指纹考勤机

c++ - 注册表中的 Internet 设置 - 如何代理自动登录?

Java Serversocket不接受连接

sockets - 如何在精益中使用套接字?