[lib] dupとdup2の違い

ちょっと気になったので調べてみた。

#include <unistd.h>

int dup(int oldfd);
int dup2(int oldfd, int newfd);

dup() は使用されていない最小の値のディスクリプタを新しいディスクリプタ として使用する。 

dup2() は oldfd の複製として newfd を作成する。必要ならば最初に newfd をクローズ (close) する。  

返り値
dup() と dup2() は新しいディスクリプタを返す。エラーの場合は -1 を返す (その時 errno に適切な値が設定される。) 

返り値は両方新しいディスクリプタらしい。

要するに、dupでは自動的に最小の値のファイルディスクリプタを複製するのに対して、dup2では自分でファイルディスクリプタの値を設定するって事かw つまりこの2つの関数の違いは、自動的に値を設定するか、自分で値を設定するかの違いって事でいいのかな

追記: 以下のような例文はよく使われる(標準入力 = 0, 標準出力 = 1、 標準エラー出力 = 2)ただし、newfd0とかは使われないけどw

newfd0 = dup2(oldfd, 0);
newfd1 = dup2(oldfd, 1);
newfd2 = dup2(oldfd, 2);

追記2: exitと_exitの違いも完全には理解してないので今度調べる予定