DUP
Section: System Calls (2)
索引
jman
BSD mandoc
索引
名称
dup
dup2
- 既存のファイル記述子を複製する
索引
ライブラリ
Lb libc
索引
書式
In unistd.h
Ft int
Fn dup int oldd
Ft int
Fn dup2 int oldd int newd
索引
解説
Fn dup
システムコールは、既存のオブジェクト記述子を複製し、
その値を呼び出しプロセスに返します
Fa ( newd
=
Fn dup oldd )
。
引数
Fa oldd
はプロセスの記述子テーブル内のインデックスで、負でない小さな整数です。
その値はテーブルのサイズより小さくなければなりません。
テーブルのサイズは
getdtablesize(2)
によって返されます。
Fn dup
呼び出しは、そのときにプロセスによって使用されていない番号のうち、
最も小さい番号の付いた記述子を返します。
記述子が参照するオブジェクトは
Fa oldd
と
Fa newd
をまったく区別しません。
したがって
Fa newd
と
Fa oldd
がオープンされたファイルへの複製された参照だった場合、すべての
read(2),
write(2)
および
lseek(2)
呼び出しは、単一のポインタをファイル内で移動します。
追加モード、ノンブロッキング入出力
および非同期入出力オプションは各参照の間で共有されます。
一つのファイルへの別々のポインタが必要な場合は、追加の
open(2)
システムコールを呼び出し、ファイルへの異なるオブジェクト参照を
得る必要があります。
このとき、新しいファイル記述子の close-on-exec フラグは設定解除されています。
Fn dup2
には新しい記述子
Fa newd
の値を指定します。
この記述子が既に使用されていた場合、
Fa oldd
Fa newd
であれば、まずその記述子は
close(2)
システムコールが使用されたかのように割り当て解除されます。
Fa oldd
が有効な記述子でなかった場合には、
Fa newd
はクローズされません。
Fa oldd
==
Fa newd
であり、しかも
Fa oldd
が有効な記述子の場合、
Fn dup2
は正常に終了し、何もしません。
索引
戻り値
いずれかの呼び出しでエラーが起きた場合は値 -1 が返されます。
外部変数
errno
はエラーの原因を示します。
索引
エラー
Fn dup
システムコールと
Fn dup2
システムコールは、次の場合に処理に失敗します:
- Bq Er EBADF
-
Fa oldd
または
Fa newd
引数が有効なアクティブ記述子ではありません。
- Bq Er EMFILE
-
アクティブな記述子が多すぎます。
索引
関連項目
accept(2),
close(2),
fcntl(2),
getdtablesize(2),
open(2),
pipe(2),
socket(2),
socketpair(2)
索引
規格
Fn dup
システムコールと
Fn dup2
システムコールは、
St -p1003.1-90
に適合しています。
索引
歴史
Fn dup
関数と
Fn dup2
関数は
AT&T System
v7
で登場しました。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- 関連項目
-
- 規格
-
- 歴史
-
Time: 07:06:25 GMT, January 12, 2009