2012-03-27 6 views
1

私はC++には本当に新しいですし、私はからの出力を取得しようとしています:私は、FTPクライアントのようにC++にし、RHEL 6execvの戻り値を取得するにはどうすればよいですか?

にプログラミングをしています

execv("./rdesktop",NULL); 

を、私はすべてを取得したいですステータスは私の外部実行中のプログラムから更新されます。誰かが私にこれをどうやってできるか教えてもらえますか?

+3

戻り値(exit()などの結果)や出力(stdout/stderrなど)?あなたの質問のタイトルは一つのことを述べていますが、あなたの質問は他のものです:-) –

+5

'execv'が何をするのか分かりません。 **あなたのプロセスを指定されたプロセスに置き換えます**。あなたのプロセスはもはや存在しないので、キャプチャを行うことはありません! –

+2

'execv'は、失敗した場合のみ返します。 –

答えて

1

あなたはwaitwaitpidwait3またはwait4を呼び出すことにより、子プロセスの終了ステータスを調べることができます。

#include <sys/types.h> 
#include <sys/wait.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    pid_t pid = fork(); 
    switch(pid) { 
    case 0: 
    // We are the child process 
    execl("/bin/ls", "ls", NULL); 

    // If we get here, something is wrong. 
    perror("/bin/ls"); 
    exit(255); 
    default: 
    // We are the parent process 
    { 
     int status; 
     if(waitpid(pid, &status, 0) < 0) { 
     perror("wait"); 
     exit(254); 
     } 
     if(WIFEXITED(status)) { 
     printf("Process %d returned %d\n", pid, WEXITSTATUS(status)); 
     exit(WEXITSTATUS(status)); 
     } 
     if(WIFSIGNALED(status)) { 
     printf("Process %d killed: signal %d%s\n", 
      pid, WTERMSIG(status), 
      WCOREDUMP(status) ? " - core dumped" : ""); 
     exit(1); 
     } 
    } 
    case -1: 
    // fork failed 
    perror("fork"); 
    exit(1); 
    } 
} 
4

execv現在のプロセスを置き換えるので、すぐに実行しているもの、それを実行した後、あなたが指定したものは何でも実行可能になります。

通常、子プロセスではfork、その後はexecvとなります。親プロセスは、新しい子のPIDを受け取り、子の実行を監視するために使用することができます。

関連する問題