Windows IPC:我可以通过匿名管道发送二进制数据吗?
Posted
技术标签:
【中文标题】Windows IPC:我可以通过匿名管道发送二进制数据吗?【英文标题】:Windows IPC: Can I send binary data over an anonymous pipe? 【发布时间】:2012-11-22 14:02:32 【问题描述】:我需要将数据从子进程发送到父进程。其中一些数据是 html、纯文本等,但也可能需要发送图像数据、zip 文件数据等。
据我了解,匿名管道使用子进程标准输入和标准输出。传统的 stdin 和 stdout 只传送文本数据:使用这种机制发送不可打印的字符会有什么问题吗?
【问题讨论】:
【参考方案1】:匿名管道和标准输入/输出之间没有关系。由于一个进程只有一个标准输入/输出,因此您可以这样为每个进程创建一个匿名管道,这听起来很愚蠢,不是吗?您可以将子进程的标准输入/输出重定向到管道,是的。但是,如果子进程能够通过其他方式(如日志文件或网络活动)报告自己,则您不必这样做。对CreatePipe
的调用为您提供读写句柄,这取决于您如何使用它们。确实可以发送任意二进制数据。在这方面,匿名管道与命名管道没有任何不同。
【讨论】:
【参考方案2】:即使您确实选择使用标准输入/标准输出重定向将管道句柄传递给子进程,只要子进程使用 Windows API 而不是 C运行时库函数。
也就是说,WriteFile
可以完美运行,但 printf
不是一个好主意。
您可以使用GetStdHandle
获取管道的句柄,以便与 Windows API 函数一起使用。
【讨论】:
以上是关于Windows IPC:我可以通过匿名管道发送二进制数据吗?的主要内容,如果未能解决你的问题,请参考以下文章