dup - システムコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 返り値
- エラー
- 警告
- 準拠
- 関連項目
名前
dup, dup2 - ファイル・ディスクリプタを複製する
書式
#include <unistd.h>
int dup(int oldfd);int dup2(int oldfd, int newfd);
説明
dup
()
と
dup2
()は、ファイル・ディスクリプタ
oldfd
の複製を作る。
dup
() または dup2
() が成功を返した場合には、
古いファイル・ディスクリプタと新しいファイル・ディスクリプタは
互いに可換なものとして使うことができる。
2つのファイル・ディスクリプタは同じファイル記述 (description)
(
open
(2)参照) を参照しており、したがってファイルオフセットやファイル状態フラグが
共有される。例えば、一方のディスクリプタに対して
lseek
(2) を使ってファイルオフセットを変更した場合、もう一方のディスクリプタの
オフセットも変化する。
2つのディスクリプタはファイル・ディスクリプタ・フラグ (close-on-exec flag)
を共有しない。複製されたディスクリプタの
close-on-exec flag
(
fcntl
(2)参照) は off となる。
dup
()は使用されていない最小の値のディスクリプタを新しいディスクリプタ
として使用する。
dup2
()は
oldfd
の複製として
newfd
を作成する。必要ならば最初に
newfd
をクローズ (close) する。
返り値
dup
()
と
dup2
()は新しいディスクリプタを返す。エラーの場合は -1 を返す
(その時
errno
に適切な値が設定される。)
エラー
-
EBADF
-
oldfd
がオープンされたファイル・ディスクリプタでないか、
newfd
がファイル・ディスクリプタとして許される範囲から外れている。
-
EBUSY
-
(Linux のみ)
open
()や
dup
()との競合状態の場合に、
dup2
()はこのエラーを返すかもしれない。
-
EINTR
-
dup2
()の呼び出しがシグナルによって割り込まれた (interrupt)。
-
EMFILE
-
プロセスがすでにオープンできる最大数までファイル・ディスクリプタ
を開いていて、さらに新しいものを開こうとした。
警告
newfd
が範囲を超えた時に返されるエラーは、
dup2
()と
fcntl(
...,
F_DUPFD
, ...
)
では異っている。
dup2
()が
F_DUPFD
と同じように
EINVAL
を返すシステムもある。
newfd
がオープンされていると、
close
()した時に報告されるはずのエラーが失われてしまう。
dup2
()を使う前に先ず
newfd
をクローズするようにした方がいいだろう。
準拠
SVr4, 4.3BSD, POSIX.1-2001.
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする