dup2
io.h:インデックス への移動
ヘッダーファイル
io.h
カテゴリ
入出力ルーチン
プロトタイプ
int dup2(int oldhandle, int newhandle);
説明
既存のファイルハンドル(newhandle)上にファイルハンドル(oldhandle)を複製します。
- dup2 は,複製元のファイルハンドルと次の点で同じ新しいファイルハンドルを作成します。
- オープンファイルまたはデバイスが同じ
- ファイルポインタが同じ(一方のファイルポインタを変更すると,もう一方も変更される)
- アクセスモード(読み取り,書き込み,読み書き)が同じ
dup2 は,newhandle の値を使って新しいハンドルを作成します。dup2 を呼び出したとき,newhandle に関連付けられたファイルが開かれている場合,そのファイルは閉じられます。
newhandle と oldhandle は,creat,open,dup,または dup2 の呼び出しによって取得されるファイルハンドルです。
戻り値
dup2 は,成功した場合は 0 を返し,そうでない場合は -1 を返します。
エラーの場合は,グローバル変数 errno に次のいずれかの値が設定されます。
EBADF - 不正なファイル番号
EMFILE - オープンファイルが多すぎる
例
#include <sys\stat.h>
#include <string.h>
#include <fcntl.h>
#include <io.h>
#define STDOUT 1
int main(void)
{
int nul, oldstdout;
char msg[] = "This is a test";
/* ファイルを作成します */
nul = open("DUMMY.FIL", O_CREAT | O_RDWR,
S_IREAD | S_IWRITE);
/* 標準出力の複製ハンドルを作成します */
oldstdout = dup(STDOUT);
/*
DUMMY.FIL のファイルハンドルを標準出力の
ファイルハンドルに複製することで,
標準出力を DUMMY.FIL にリダイレクトします
*/
dup2(nul, STDOUT);
/* DUMMY.FIL のハンドルを閉じます */
close(nul);
/* DUMMY.FIL にリダイレクトされます */
write(STDOUT, msg, strlen(msg));
/* 元の標準出力ハンドルを復元します */
dup2(oldstdout, STDOUT);
/* STDOUT の複製ハンドルを閉じます */
close(oldstdout);
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |
+ |