2017-08-01 54 views
2

所以我在C++中發現我可以使用popen()方法來運行一個命令並打開一個流,以便我可以讀取它的輸入和輸出。 這適用於我正在使用它,但它困擾我,它將一個命令傳遞到外殼爲了做到這一點。C++:如何在不傳遞命令的情況下執行文件?

我想知道的是,如果可以在給定文件位置的情況下執行可執行文件。然後我需要能夠讀取程序的輸出。我可以在不向shell傳遞命令的情況下執行此操作嗎?

我只是對不同shell的兼容性有所擔憂。如果我設計我的程序時採用BASH環境,如果它是使用Bourne Shell或CSH運行的話,它可能最終會失效嗎?或者我只是在過度使用它?

+4

除了相當無用的std :: system()之外,沒有可執行程序的可移植方式。有很多操作系統特定的方法來做到這一點。 –

+3

使用'exec'函數之一。如果您希望原始程序繼續執行,請與'fork'組合。 –

+0

謝謝Jesper和Douglas。 exec和fork命令正是我所需要的。我一定會考慮使用他們和管道爲我的應用程序 –

回答

1

執行任何程序都是operating system特定(幾乎根據操作系統的定義)。閱讀免費下載的Operating Systems : Three Easy Pieces瞭解更多信息。

你只能關心一個特定的操作系統,如Linux(或OS類)。然後,我建議關心POSIX系統,並使用像posix_spawnfork的基元,然後再使用一些exec等。Advanced Linux Programming給出了很好的解釋並可以免費下載。

或者你可以使用一些框架庫像POCOQt等等都提供了各種抽象來運行一些OS「中性」的方式計劃(針對一些常見的操作系統-Linux,Windows中,MacOSX-他們支持)。

+0

謝謝,這很好地回答了我的問題。 –

相關問題