2017-08-01 9 views
2

私はC++で、popen()メソッドを使用して、コマンドを実行してストリームを開いて、その入出力から読み込むことができることを確認しました。 これは私が使用しているもので動作しますが、それを実行するためにシェルにコマンドを渡すことは煩わしいものです。C++:コマンドをシェルに渡さずにファイルを実行する方法は?

私が知りたいことは、ファイルの場所を指定して実行可能ファイルを実行できるかどうかです。私はその後、プログラムの出力を読むことができる必要があります。シェルにコマンドを渡すことなくこれを行うことはできますか?

私はちょうど異なるシェル間の互換性に関するいくつかの懸念がありました。 BASH環境を想定してプログラムを設計すると、Bourne ShellまたはCSHを実行すると機能不全に陥ることがありますか?

+4

かなり役に立たないstd :: system()以外のプログラムを移植する方法はありません。これを行うためのOS固有の方法がたくさんあります。 –

+3

'exec'関数の1つを使います。元のプログラムを実行し続けるには、 'fork'と組み合わせてください。 –

+0

JesperとDouglasに感謝します。 execとforkコマンドは私が探していたものとまったく同じものでした。私は間違いなく、私のアプリケーションのために彼らとパイプを使用して調べます –

答えて

1

任意のプログラムの実行は、特定の(ほぼOSesの定義による)operating systemです。自由にダウンロードできるOperating Systems : Three Easy Piecesを読んでください。

Linux(またはOSのクラス)などの特定のOSのみを気にすることができます。そして、私はPOSIXシステムを気にして、posix_spawnforkのようなプリミティブを使い、その後にはexecなどを使うことをお勧めします。Advanced Linux Programmingは良い説明を与え、自由にダウンロードできます。

それとも、どちらが(彼らはサポートして、いくつかの共通のOS -Linux、Windows用MacOSX-)を、いくつかのOS「ニュートラル」な方法でプログラムを実行するための抽象化を提供する... POCOまたはQtなどのようないくつかのフレームワークのライブラリを使用することができます。

+0

ありがとう、これはうまく私の質問に答える。 –

関連する問題