[英]c++ How to start a process with new stdin and stdout
我正在openFrameworks中編寫一個程序,一個c ++框架。 我想啟動另一個應用程序並通過stdin和stdout與它通信。 我可以使用ofThread類方便地啟動一個新線程。 我曾計划創建兩個管道並將std重定向到線程中(使用dup2),但不幸的是,這會重定向整個應用程序的管道,而不僅僅是線程。
有沒有辦法我可以啟動另一個應用程序,並能夠讀取其輸出並提供輸入?
您需要使用fork()
函數(可能涉及另一個線程)創建子進程,而不是另一個線程。
區別在於,fork創建了父進程環境的完整副本,該副本應該在子進程范圍內的exec()
調用上顯示,而來自線程的exec()
嘗試從其父進程共享所有資源。 (線程)因而可能導致意外的並發(種族條件)問題。
如果您的“另一個應用程序”在現有程序中實現為子線程,則無需重定向stdin和stdout通過管道與其進行通信。 只需在啟動時將管道文件描述符傳遞給子線程。 (您可以使用fdopen
將文件描述符包裝在FILE對象中。如果您有dup2
和pipe
,也可以使用fdopen
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.