trusty (2) dup.2.gz

Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all bug

名前

       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 の複製を作る。

       dup()  は最も小さい番号の未使用のディスクリプタを 新しいディスクリプタとして使用する。

       dup2()  は newfdoldfd の複製として作成する。 必要であれば最初に newfd をクローズする。 以下の点に注意
       すること。

       *  oldfd が有効なファイルディスクリプタでない場合、その呼び出しは失敗し、 newfd はクローズされない。

       *  oldfd が有効なファイルディスクリプタで、 newfdoldfd と同じ値の場合、 dup2()  は何もせず、 newfd を
          返す。

       これらのシステムコールのいずれかが成功を返した場合には、 古いファイルディスクリプタと新しいファイルディス
       クリプタは     互いに可換なものとして使うことができる。     2つのファイルディスクリプタは同じファイル記述
       (description)   (open(2)  参照) を参照しており、したがってファイルオフセットやファイル状態フラグが 共有さ
       れる。例えば、一方のディスクリプタに対して lseek(2)  を使ってファイルオフセットを変更した場合、もう一方の
       ディスクリプタの オフセットも変化する。

       2つのディスクリプタはファイルディスクリプタフラグ  (close-on-exec flag)  を共有しない。複製されたディスク
       リプタの close-on-exec flag (fcntl(2)  参照) は off となる。

       dup3()  は dup2()  と同じだが、以下の点が異なる。

       *  呼び出し元が、新しいファイルディスクリプタに対して  close-on-exec   フラグを強制的に設定することができ
          る。 これを行うには、 flagsO_CLOEXEC を指定する。 このフラグが役に立つ理由については、 open(2)  の
          O_CLOEXEC フラグの説明を参照のこと。

       *  oldfdnewfd と同じ場合、 dup3()  は EINVAL エラーで失敗する。

返り値

       成功すると、これらのシステムコールは新しいディスクリプタを返す。 エラーの場合、-1 を返し、 errno を適切に
       設定する。

エラー

       EBADF  oldfd  がオープンされたファイルディスクリプタでないか、 newfd がファイルディスクリプタとして許され
              る範囲から外れている。

       EBUSY  (Linux のみ)  open(2)  や dup()  との競合状態の場合に、 dup2()  や dup3() はこのエラーを返すかもし
              れない。

       EINTR  dup2()  や dup3()  の呼び出しがシグナルにより割り込まれた。 signal(7)  参照。

       EINVAL (dup3())  flags に無効な値が入っている。 もしくは、 oldfdnewfd と同じであった。

       EMFILE プロセスがすでにオープンできる最大数までファイルディスクリプタ  を開いていて、さらに新しいものを開
              こうとした。

バージョン

       dup3()  はバージョン 2.6.27 で Linux に追加された。 glibc によるサポートはバージョン  2.9  以降で利用でき
       る。

準拠

       dup(), dup2(): SVr4, 4.3BSD, POSIX.1-2001.

       dup3()  は Linux 固有である。

注意

       newfd  が範囲を超えた時に返されるエラーは、  dup2()  と fcntl(..., F_DUPFD, ...)  では異っている。 dup2()
       が F_DUPFD と同じように EINVAL を返すシステムもある。

       newfd  がオープンされていると、  close(2)   した時に報告されるはずのエラーが失われてしまう。  dup2()   や
       dup3()  を使う前に先ず newfd をクローズするようにした方がいいだろう。

関連項目

       close(2), fcntl(2), open(2)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部 である。プロジェクトの説明とバグ報告
       に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。