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:我可以通过匿名管道发送二进制数据吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 Windows 命名管道用于 IPC 的一种有效方法

进程间通信(IPC)

进程间通信(IPC)

Linux - 进程间通信 - 匿名管道

IPC之消息队列·即时通讯小程序

匿名管道 c# WPF