コマンドを介してファイル記述子を渡し、execve()
反対側でファイル記述子にアクセスするにはどうすればよいのでしょうか。ファイル記述子をリダイレクトするために使用できることは知っていdup2
ますが、それはできません。実際にファイル記述子を子に渡して、子で使用する必要があります。
私がこれまでにしたこと:
親はpipe
次のような+引数を作成します。
int pfd[2];
if(pipe(pfd) == -1)
exitWithError("PIPE FAILED", 1);
char *args_1[] = {"reader", argv[1], (char*) pfd, (char *) 0};
次に、子供はexecve
次fork()
のように電話をかけます。
close(pfd[1]);
execve("./reader", args_1, NULL);
次に、リーダープログラムで、渡されたパイプ記述子にアクセスしようとします。
int main(int argc, char* argv[]){
...
write(argv[2][1], buf, read_test);
argv[2]
パイプ記述子を参照している必要があり、次にパイプargv[1]
の書き込み端に移動する必要があります。ここで型キャストを別の方法で行う必要があることはほぼ間違いありませんが、私が試したすべてがうまくいくわけではありません。
注:このプログラムの作業バージョンを使用dup2
して、子にリダイレクトしstdin
たりstdout
、子にリダイレクトしたりしていますが、プロジェクトの指示に従って、実際にパイプ記述子を子に渡す必要があります。
どんな助けでも大歓迎です。