Windows IPC:我可以通过匿名管道发送二进制数据吗?

时间:2012-11-22 14:02:33

标签: windows ipc pipe binary-data

我需要将子进程的数据发送到父进程。其中一些数据是HTML,纯文本等,但也可能需要发送图像数据,zip文件数据等。

据我了解,匿名管道使用子进程标准输入和标准输出。传统上stdin和stdout只传递文本数据:使用这种机制发送不可打印的字符会有问题吗?

2 个答案:

答案 0 :(得分:2)

匿名管道和stdin / out之间没有关系。由于一个进程只有一个stdin / out,你可以为每个进程创建一个匿名管道,这听起来很愚蠢,不是吗?您可以 stdin / out子进程重定向到管道,是的。但是,如果子进程能够通过其他方式(如日志文件或网络活动)报告自己,则不必如此。拨打CreatePipe可以让您阅读和书写句柄,这取决于您如何使用它们。确实可以发送任意二进制数据。在这方面,匿名管道与命名管道没有任何区别。

答案 1 :(得分:0)

即使您确实选择使用stdin / stdout重定向将管道句柄传递给子进程,如果子进程使用Windows API发送数据而不是C,则不应该有任何问题运行时库函数。

也就是说,WriteFile可以完美地运作,但printf不是一个好主意。

您可以使用GetStdHandle获取管道的句柄,以便与Windows API函数一起使用。