簡體   English   中英

c ++如何使用新的stdin和stdout啟動進程

[英]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對象中。如果您有dup2pipe ,也可以使用fdopen 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM