私はちょうど低レベルのものとCを学び始めた初心者です。これは愚かな質問かもしれませんが、私はファイル記述子について戸惑っています。それらをコピーするには、システムコールdup2()またはdup()が必要であることを理解しています。しかし、古い値を新しい変数に代入するだけではコピーできないのはなぜですか?整数をf [0]、[1]特定の意味を持っている、とエンコードのいくつかの並べ替えですfはそのため例えば、なぜ我々はこれを行うことができますファイル記述子を新しい変数に明示的に割り当てるだけでコピーできないのはなぜですか?
int f[2];
pipe(f); // I call pipe just to create two file descriptors, nothing special
int new_descriptor = f[0]; // this line is where I'm confused
はされますか? ありがとう!
'dup'は、同じファイルを指す新しいfdを作成して返します。 fdはプロセスファイルテーブルへのインデックスであるため、 'dup'は実際にプロセスファイルテーブル上の次のオープンスポットを見つけ、ポインタを(カーネル内の)ファイル構造体にコピーしてユーザ空間に返します。 – evaitl