マルチプロセスの標準出力のリダイレクトに関する問題が発生しています。
プロセス A があると仮定すると、A で fork() を使用すると、プロセス A と B が取得されます。そして、B で fork() を使用すると、最終的にプロセス A、B、および C が取得されます。B と C の両方が別のプログラムを実装しています。 exec()。
ここで、A と B の stdout を 2 つのパイプを使用して C の stdin にリダイレクトしようとしています。
#include<unistd.h>
#include<stdio.h>
#include<sty/types.h>
int main()
{
int AtoC [2];
pipe(AtoC);
int fd1,fd2;
fd1=fork();
if(fd1>0)
{
/***In process A, I do the following steps: ***/
close(AtoC[0]);
dup2(AtoC[1], STDOUT_FILENO);
/* program running in process A */
}
else
{
int BtoC [2];
pipe(BtoC);
fd2=fork();
if(fd2>0)
{
/***In process B, I do the following steps: ***/
close(AtoC[1]);
close(BtoC[0]);
dup2(BtoC[1], STDOUT_FILENO);
/*** execute another program in process B using execl(); ***/
}
else
{
/*** In process C, I do the following steps: ***/
close(AtoC[1]);
close(BtoC[1]);
dup2(AtoC[0],STDIN_FILENO);
dup2(BtoC[0],STDIN_FILENO);
/*** execute another different program in process C using execl(); ***/
}
}
}
さて、これら2つのステートメントの後:
dup2(AtoC[0],STDIN_FILENO);
dup2(BtoC[0],STDIN_FILENO);
BtoC[0]
プロセス C の stdin は、最終的にプロセス B の stdout であるにリダイレクトされます。また、プロセス A の stdout は、プロセス C の stdin に渡されません。
私の質問は、プロセス A と B の両方の stdout を同時にプロセス C の stdin にリダイレクトできる解決策があるかどうかです。
もう 1 つの質問は、プロセス A の stdout も画面に出力したい場合、どうすればよいですか? tee
コマンドラインのコマンドを知っています。プロセスAで対応する関数を使用しようとしましたtee(int fd_in, int fd_out, size_t len, unsigned int flags)
が、プロセスAの標準出力の出力に失敗しました。
どんな提案でも大歓迎です、ありがとう。