> Linux Reviews > man >

dup


  1. dup.2.man


1. dup.2.man

Manpage of DUP

DUP

Section: Linux Programmer's Manual (2)
Updated: 2010-09-10
Index Return to Main Contents
 

名前

dup, dup2, dup3 - ファイル・ディスクリプタを複製する  

書式

#include <unistd.h>

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

#define _GNU_SOURCE             /* feature_test_macros(7) 参照 */
#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)


 

Index

名前
書式
説明
返り値
エラー
バージョン
準拠
注意
関連項目

This document was created by man2html using the manual pages.
Time: 17:38:18 GMT, October 23, 2013

SVENSKA - SVENSKA - SVENSKA - SVENSKA - nl - pl - SVENSKA