Windowsでは、CreateProcess
にはスタンダードストリームをキャッチするためにSTARTUPINFO
と入力し、GetExitCodeProcess
機能を使用して終了ステータスを取得する必要があります。親プロセスは、おそらくfork
の代わりexecve
を使用するLinux系OS上でhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms682499.aspx
にスタンダール・ストリームをリダイレクトする方法の例があり、そしてフォークプロセスで作業することは別の話です。
WindowsとLinuxのリダイレクトストリームでは、複数のパイプ(各ストリームに1つずつ)を作成し、子プロセスストリームをそのパイプにリダイレクトし、親プロセスがそのパイプからデータを読み取る必要があります。 Linux用の
サンプルコード:
は
int fd[2];
if (pipe(fd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
pid_t cpid = fork();
if (cpid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (cpid == 0) { // child
dup2(fd[1], STDERR_FILENO);
fprintf(stderr, "Hello, World!\n");
exit(EXIT_SUCCESS);
} else { // parent
char ch;
while (read(fd[0], &ch, 1) > 0)
printf("%c", ch);
exit(EXIT_SUCCESS);
}
EDIT:あなたが他のプログラムからのストリームをキャッチする必要がある場合はは、上記のように第1、第2 fork
、同じstrageyを使用 - (上記のコードのように)使用パイプを、その後、execve
別progrram子プロセスで、実行終了を待ってからリターンコードをキャッチするために、親プロセスでこのコードを使用:
int status;
if (waitpid(cpid, &status, 0) < 0) {
perror("waitpid");
exit(EXIT_FAILURE);
}
あなたはmanページに詳細を見つけることができます,dup2およびwaitpid。
どのようなOSですか?そして、彼らを一緒に捉えるには、どのようなアプローチが分かっていますか? – ybungalobill
私はUbuntuを使用していますが、私は2>&1を使用できることを知っています。しかし、私はそれらを分離してほしい。ありがとう –
この答えを見て:http://stackoverflow.com/a/12839498/1741542 –