other versions
other sections
DUP(2) | Linux Programmer's Manual | DUP(2) |
名前¶
dup, dup2, dup3 - ファイル・ディスクリプタを複製する書式¶
#include <unistd.h>int dup(int oldfd); int dup2(int oldfd, int newfd);#define _GNU_SOURCE /* feature_test_macros(7) 参照 */ #include <fcntl.h> /* 定数 O_* の定義の取得 */ #include <unistd.h>int dup3(int oldfd, int newfd, int flags);
説明¶
これらのシステムコールは、ファイル・ディスクリプタ oldfd の複製を作る。- *
- oldfd が有効なファイルディスクリプタでない場合、その呼び出しは失敗し、 newfd はクローズされない。
- *
- oldfd が有効なファイルディスクリプタで、 newfd が oldfd と同じ値の場合、 dup2() は何もせず、 newfd を返す。
- *
- 呼び出し元が、新しいファイル・ディスクリプタに対して close-on-exec フラグを強制的に設定することができる。 これを行うには、 flags に O_CLOEXEC を指定する。 このフラグが役に立つ理由については、 open(2) の O_CLOEXEC フラグの説明を参照のこと。
- *
- oldfd が newfd と同じ場合、 dup3() は EINVAL エラーで失敗する。
返り値¶
成功すると、これらのシステムコールは新しいディスクリプタを返す。 エラーの場合、-1 を返し、 errno を適切に設定する。エラー¶
- EBADF
- oldfd がオープンされたファイル・ディスクリプタでないか、 newfd がファイル・ディスクリプタとして許される範囲から外れている。
- EBUSY
- (Linux のみ) open(2) や dup() との競合状態の場合に、 dup2() や dup3() はこのエラーを返すかもしれない。
- EINTR
- dup2() や dup3() の呼び出しがシグナルにより割り込まれた。 signal(7) 参照。
- EINVAL
- (dup3()) flags に無効な値が入っている。 もしくは、 oldfd が newfd と同じであった。
- EMFILE
- プロセスがすでにオープンできる最大数までファイル・ディスクリプタ を開いていて、さらに新しいものを開こうとした。
バージョン¶
dup3() はバージョン 2.6.27 で Linux に追加された。 glibc によるサポートはバージョン 2.9 以降で利用できる。準拠¶
dup(), dup2(): SVr4, 4.3BSD, POSIX.1-2001.注意¶
newfd が範囲を超えた時に返されるエラーは、 dup2() と fcntl(..., F_DUPFD, ...) では異っている。 dup2() が F_DUPFD と同じように EINVAL を返すシステムもある。関連項目¶
close(2), fcntl(2), open(2)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2012-02-14 | Linux |