2013-12-11 71 views
1

可以在初始化時使用LPSTARTUPINFO結構來完成該操作,但可以在子進程已經運行之後完成。目標是讓子進程從STDIN中讀取,但是每隔一段時間父進程應該切入,並通過不同的匿名管道發送內容。初始化後父進程的STDIN是否可以由父進程更改?

+0

我不明白你爲什麼需要這個。父母控制着孩子的STDIN。爲什麼你需要多個頻道? –

+0

初始化期間它在控制中,對嗎?我正在討論初始化後改變它。我從來沒有問過有多個頻道。 – v010dya

+0

當然,你做到了。你希望子進程聽一個不同的STDIN。這是第二個頻道。但爲什麼不把一切都寫下來呢? –

回答

1

爲什麼不在父母的同一控制檯窗口中啓動孩子?然後,您可以讀取父項中的鍵盤輸入並將其輸送給孩子,偶爾會穿插其他輸入。

如果您的父進程是一個GUI應用程序,然後編寫一個額外的控制檯應用程序來完成這項工作。

如果孩子必須在單獨的窗口中運行,則可以使用相同的技巧:在自己的窗口中創建一個與孩子共享窗口的新進程。

+0

我自己實際上想過這個三層系統,可能會跟那個一起。我想我太習慣於做POSIX方式了,這更直接,當我想出這個限制時,我的想法並不是那麼簡單, 「這一定是不可能的」,而是「我不能找到正確的功能」。很傷心,我錯了。 – v010dya

1

在創建子進程後,父進程不能更改子進程的STDIN。但是,父級可以創建可繼承的管道,並將其句柄值作爲命令行參數傳遞給子級,那麼子級可以根據需要提取該值並使用該管道,而不會影響其正常STDIN。孩子可以定期撥打PeekNamedPipe(),或者使用工作線程來監視傳入數據的管道。

相關問題