2

c ++から別のプログラムを実行し、その出力をファイルにリダイレクトして、その結果コードを返したいと思います。しかし、プログラムの実行に失敗した場合(パスが正しくないなど)、知りたいです。

これが私の問題です。ファイルをリダイレクトし、プログラムの結果コードを取得し、システムのエラーを一度に取得するにはどうすればよいですか?

  • System():結果を返し、リダイレクトするのは簡単ですが、結果がシステムエラーなのかアプリケーションの結果なのかを知る方法はありません
  • posix_spawn():システムエラーがあるかどうかはわかりますが、アプリケーションの結果コードを取得するにはどうすればよいですか?

実行されたアプリケーションのコードを制御しないことに注意してください。Windows(申し訳ありませんが...)OpenProcess()関数を使用すると簡単です。必要なOpenProcess()のはLinuxです。

ありがとう

4

2 に答える 2

1

機能を使用する必要がありposix_spawnます。

システム コールは、終了コードを取得するのwaitpidに役立ちます。

この質問を参照してください。

pid_t waitpid(pid_t pid, int *status, int options);
于 2013-03-06T19:01:56.467 に答える
1

あなたがする必要があるのは、標準の fork-exec 呼び出しとファイルのリダイレクトにかなり一致することです:

int pid = fork();
if( pid == -1 ) {
   // process error here
}

if( pid == 0 ) {
   int fd = open( "path/to/redirected/output", ... );
   ::close( 1 );
   dup2( fd, 1 );
   ::close( fd );
   exec...( "path to executable", ... );
   // if we are here there is a problem
   exit(123);
}
int status = 0;
waitpid( pid, &status, 0 );
// you get exit status in status

exec とは... exec 関数ファミリーの 1 つを意味します (詳細については、「man 3 exec」と入力してください)。自分に合ったものを選択してください。エラー出力をリダイレクトする必要がある場合は、同じことを行いますが、記述子 2 を使用します。

于 2013-03-06T19:13:02.047 に答える