私はC++には本当に新しいですし、私はからの出力を取得しようとしています:私は、FTPクライアントのようにC++にし、RHEL 6execvの戻り値を取得するにはどうすればよいですか?
にプログラミングをしています
execv("./rdesktop",NULL);
を、私はすべてを取得したいですステータスは私の外部実行中のプログラムから更新されます。誰かが私にこれをどうやってできるか教えてもらえますか?
私はC++には本当に新しいですし、私はからの出力を取得しようとしています:私は、FTPクライアントのようにC++にし、RHEL 6execvの戻り値を取得するにはどうすればよいですか?
にプログラミングをしています
execv("./rdesktop",NULL);
を、私はすべてを取得したいですステータスは私の外部実行中のプログラムから更新されます。誰かが私にこれをどうやってできるか教えてもらえますか?
あなたはwait
、waitpid
、wait3
または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);
}
}
execv
現在のプロセスを置き換えるので、すぐに実行しているもの、それを実行した後、あなたが指定したものは何でも実行可能になります。
通常、子プロセスではfork
、その後はexecv
となります。親プロセスは、新しい子のPIDを受け取り、子の実行を監視するために使用することができます。
戻り値(exit()などの結果)や出力(stdout/stderrなど)?あなたの質問のタイトルは一つのことを述べていますが、あなたの質問は他のものです:-) –
'execv'が何をするのか分かりません。 **あなたのプロセスを指定されたプロセスに置き換えます**。あなたのプロセスはもはや存在しないので、キャプチャを行うことはありません! –
'execv'は、失敗した場合のみ返します。 –