匿名管道的 ReadFile 函数
Posted
技术标签:
【中文标题】匿名管道的 ReadFile 函数【英文标题】:ReadFile function for an anonymous pipe 【发布时间】:2013-04-17 21:18:56 【问题描述】:我有一个关于 Windows 管道的问题。在ReadFile
功能手册中写着:
如果正在使用匿名管道并且写入句柄已关闭,则当 ReadFile 尝试使用管道对应的读取句柄进行读取时,函数返回 FALSE,GetLastError 返回 ERROR_BROKEN_PIPE。
让我们假设从管道中读取每秒发生一次。从上次读取操作开始,发生了以下情况:写入管道操作和关闭写入处理程序。根据上面的手册,该函数返回false - 读取操作失败。我的问题是未读取的数据会发生什么?我怎样才能得到它们?
【问题讨论】:
【参考方案1】:如你所料,数据放入管道后,你可以将其读出,直到到达数据的末尾,然后读取将失败。
【讨论】:
所以,当ReadFile
返回false
时出现ERROR_BROKEN_PIPE
错误。这并不意味着函数失败了,这意味着它完成了它的工作(从管道中读取最后的数据)?
@user14416:是的——如果你(例如)产生一个写一些输出然后退出的孩子,那么你应该读取数据然后得到 ERROR_BROKEN_PIPE。当然,它可能也意味着孩子坠毁,或类似的事情。
相信调用ReadFile从管道中获取最后一条数据会成功,下一次调用会返回ERROR_BROKEN_PIPE。换句话说,错误被推迟到管道为空。以上是关于匿名管道的 ReadFile 函数的主要内容,如果未能解决你的问题,请参考以下文章