久野です。

matsui888@hotmail.comさん:
> dup(fd); //既生成のディスクリプタを空いている1番に複製?

  dupは「今あいている一番若い番号に複製する」という仕様に
なっています。なので、たとえば

  0:X  1:Y  2:Z

という対応づけになっているのを

  0:Y  1:Z  2:X

のように「番号を割り当て直したい」としますよね。それには

  → dup(0) →    0:X  1:Y  2:Z  3:X
  → close(0) →  0:-  1:Y  2:Z  3:X
  → dup(1) →    0:Y  1:Y  2:Z  3:X
  → close(1) →  0:Y  1:-  2:Z  3:X
  → dup(2)   →  0:Y  1:Z  2:Z  3:X
  → close(2) →  0:Y  1:Z  2:-  3:X
  → dup(3)   →  0:Y  1:Z  2:X  3:X
  → close(3) →  0:Y  1:Z  2:X

なんていう風にしてできるわけです。なお、Unixでは0が標準入力、1が
標準出力、2が標準エラー出力なので、何かを特定番号に割り当てたい
というのは結構あるわけです。

        うまくできているというか、パズルみたいというか。    久野