DUP(2) FreeBSD システムコールマニュアル DUP(2)
名称
dup, dup2 − 既存のファイル記述子を複製する |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <unistd.h> int |
dup(int oldd); int |
dup2(int oldd, int newd); |
解説 |
dup() システムコールは、既存のオブジェクト記述子を複製し、その値を呼び出 しプロセスに返します (newd = dup(oldd)) 。引数 oldd はプロセスの記述子 テーブル内のインデックスで、負でない小さな整数です。その値はテーブルのサ イズより小さくなければなりません。テーブルのサイズは getdtablesize(2) に よって返されます。 dup() 呼び出しは、そのときにプロセスによって使用されて いない番号のうち、最も小さい番号の付いた記述子を返します。 記述子が参照するオブジェクトは oldd と newd をまったく区別しません。した がって newd と oldd がオープンされたファイルへの複製された参照だった場 合、すべての read(2), write(2) および lseek(2) 呼び出しは、単一のポインタ をファイル内で移動します。追加モード、ノンブロッキング入出力および非同期 入出力オプションは各参照の間で共有されます。一つのファイルへの別々のポイ ンタが必要な場合は、追加の open(2) システムコールを呼び出し、ファイルへの 異なるオブジェクト参照を得る必要があります。このとき、新しいファイル記述 子の close-on-exec フラグは設定解除されています。 dup2() には新しい記述子 newd の値を指定します。この記述子が既に使用されて いた場合、 oldd ≠ newd であれば、まずその記述子は close(2) システムコール が使用されたかのように割り当て解除されます。 oldd が有効な記述子でなかっ た場合には、 newd はクローズされません。 oldd == newd であり、しかも oldd が有効な記述子の場合、 dup2() は正常に終了し、何もしません。 |
戻り値
いずれかの呼び出しでエラーが起きた場合は値 -1 が返されます。外部変数 errno はエラーの原因を示します。 |
エラー
dup() システムコールと dup2() システムコールは、次の場合に処理に失敗しま す: |
[EBADF]
oldd または newd 引数が有効なアクティブ記述子ではあり ません。 [EMFILE] 関連項目 |
accept(2), close(2), fcntl(2), getdtablesize(2), open(2), pipe(2), socket(2), socketpair(2) |
規格
dup() システムコールと dup2() システムコールは、 ISO/IEC 9945-1:1990 (‘‘POSIX.1’’) に適合しています。 |
歴史
dup() 関数と dup2() 関数は Version 7 AT&T UNIX で登場しました。 FreeBSD 10.0 June 4, 1993 FreeBSD 10.0 |