C++ 匿名管道的ReadFile函数

C++ 匿名管道的ReadFile函数,c++,windows,ipc,C++,Windows,Ipc,我有一个关于Windows管道的问题。在ReadFile功能手册中: 如果正在使用匿名管道且写入句柄已关闭,则当ReadFile尝试使用管道对应的读取句柄读取时,函数将返回FALSE,GetLastError将返回ERROR\u breaked\u pipe 让我们假设每秒都会从管道读取数据。从上次读取操作开始,发生了以下情况:对管道的写入操作和写入处理程序的关闭。根据上述手册,该函数返回错误-读取操作失败。我的问题是,未读取的数据会发生什么情况?如何获取它们?正如您可能预期的那样,在数据放入管

我有一个关于Windows管道的问题。在
ReadFile
功能手册中:

如果正在使用匿名管道且写入句柄已关闭,则当ReadFile尝试使用管道对应的读取句柄读取时,函数将返回FALSE,GetLastError将返回ERROR\u breaked\u pipe


让我们假设每秒都会从管道读取数据。从上次读取操作开始,发生了以下情况:对管道的写入操作和写入处理程序的关闭。根据上述手册,该函数返回错误-读取操作失败。我的问题是,未读取的数据会发生什么情况?如何获取它们?

正如您可能预期的那样,在数据放入管道后,您可以读取数据,直到到达数据的末尾,然后读取将失败。

正如您可能预期的那样,在数据放入管道后,您可以读取数据,直到到达数据的末尾,然后读取将失败。

,当
ReadFile
返回
false
时,出现
ERROR\u break\u PIPE
错误。这并不意味着函数失败,而是意味着它完成了它的工作(从管道中读取最后的数据)?@user14416:是的——如果您(例如)生成了一个子函数,该子函数写入一些输出,然后退出,那么您将读取数据,然后得到错误管道。当然,这也可能意味着孩子崩溃了,或者其他类似的事情。我相信从管道中获取最后数据的ReadFile调用会成功,下一次调用将返回ERROR\u break\u pipe。换句话说,错误被推迟到管道为空。因此,当
ReadFile
返回
false
时,管道出现
error\u breaked\u error
错误。这并不意味着函数失败,而是意味着它完成了它的工作(从管道中读取最后的数据)?@user14416:是的——如果您(例如)生成了一个子函数,该子函数写入一些输出,然后退出,那么您将读取数据,然后得到错误管道。当然,这也可能意味着孩子崩溃了,或者其他类似的事情。我相信从管道中获取最后数据的ReadFile调用会成功,下一次调用将返回ERROR\u break\u pipe。换句话说,错误会推迟到管道为空。