strace
は、A
という2つの子プログラムをフォークするプログラムのうち、とC
と呼ばれました。 strace
でstrayscのシステムコール
、私はsyscalls
を次ています
pipe[([3,4]) = 0
pipe([5,6]) = 0
fork(wc) = 7135
fork (gnetcat) = 7136
close(3) = 0
close(5) = 0
close(4) = 0
close(6) = 0
wait4(-1, NULL, 0, NULL) = 7136
wait4(-1, NUKLL, 0, NULL) = 7135
が、私はその場合はCでプログラムA
を書き換えしようとしています、私は本当に知っている必要はありませんどのようなものをファイルディスクリプタ3
、4
、 5
と6
はどうですか?彼らが何であるかを知る方法はありますか?私は3
がstderr
であることを知っています。
はなぜ、空のファイルのファイル記述子ですか?彼らはデータを配管するのにどのように機能しますか? Cでそれを実装できるようにするには、本当に '4 'とそれより上位のすべてのファイル記述子がどういう意味であるのでしょうか?パイプにそれらを渡すことはできますか? – darksky
ファイル記述子は(開かれた)パイプの表現です。書いている場所を特定できるようにするには、fdが必要です。 - あなたのstraceにはread()やwrite()が含まれていないので、これらのパイプには何も送信されていないようです。 - しかし、 "fork(プログラム)"はあなたがそれを編集したことを示唆しています:-) – Sec