我需要將子進程的數據發送給父進程。其中一些數據是HTML,純文本等,但也可能需要發送圖像數據,zip文件數據等。Windows IPC:我可以通過匿名管道發送二進制數據嗎?
據我所知,匿名管道使用子進程標準輸入和標準輸出。傳統的stdin和stdout只能傳遞文本數據:使用這種機制發送非打印字符會有什麼問題嗎?
我需要將子進程的數據發送給父進程。其中一些數據是HTML,純文本等,但也可能需要發送圖像數據,zip文件數據等。Windows IPC:我可以通過匿名管道發送二進制數據嗎?
據我所知,匿名管道使用子進程標準輸入和標準輸出。傳統的stdin和stdout只能傳遞文本數據:使用這種機制發送非打印字符會有什麼問題嗎?
匿名管道和stdin/out之間沒有關係。由於一個進程只有一個標準輸出/輸出,您可以用這種方式爲每個進程創建一個匿名管道,這聽起來很蠢,不是嗎?你可以重定向 stdin /從一個子進程到管道,是的。但是,如果子進程能夠通過另一種方式(如日誌文件或網絡活動)報告自己,則不必這樣做。致電CreatePipe
會給你讀寫手柄,這取決於你如何使用它們。發送任意二進制數據的確是可能的。在這方面,匿名管道與命名管道沒有任何區別。
即使您選擇使用stdin/stdout重定向來將管道句柄傳遞給子進程,您應該沒有任何問題,前提是子進程使用Windows API發送數據而不是C運行時庫函數。
也就是說,WriteFile
將很好地工作,但printf
不會是一個好主意。
您可以使用GetStdHandle
獲取管道的句柄以使用Windows API函數。