我需要将子进程的数据发送到父进程。其中一些数据是HTML,纯文本等,但也可能需要发送图像数据,zip文件数据等。
据我了解,匿名管道使用子进程标准输入和标准输出。传统上stdin和stdout只传递文本数据:使用这种机制发送不可打印的字符会有问题吗?
答案 0 :(得分:2)
匿名管道和stdin / out之间没有关系。由于一个进程只有一个stdin / out,你可以为每个进程创建一个匿名管道,这听起来很愚蠢,不是吗?您可以将 stdin / out子进程重定向到管道,是的。但是,如果子进程能够通过其他方式(如日志文件或网络活动)报告自己,则不必如此。拨打CreatePipe
可以让您阅读和书写句柄,这取决于您如何使用它们。确实可以发送任意二进制数据。在这方面,匿名管道与命名管道没有任何区别。
答案 1 :(得分:0)
即使您确实选择使用stdin / stdout重定向将管道句柄传递给子进程,如果子进程使用Windows API发送数据而不是C,则不应该有任何问题运行时库函数。
也就是说,WriteFile
可以完美地运作,但printf
不是一个好主意。
您可以使用GetStdHandle
获取管道的句柄,以便与Windows API函数一起使用。