OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / release / man2 / rename.2
index 2496b34..7ee23ea 100644 (file)
@@ -1,6 +1,7 @@
 .\" This manpage is Copyright (C) 1992 Drew Eckhardt;
 .\"             and Copyright (C) 1993 Michael Haardt;
-.\"             and Copyright (C) 1993,1995 Ian Jackson.
+.\"             and Copyright (C) 1993,1995 Ian Jackson
+.\"            and Copyright (C) 2006, 2014 Michael Kerrisk
 .\"
 .\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
 .\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
 .\"
-.TH RENAME 2 2013\-01\-27 Linux "Linux Programmer's Manual"
+.TH RENAME 2 2014\-08\-19 Linux "Linux Programmer's Manual"
 .SH 名前
-rename \- ファイルの名前や位置を変更する
+rename, renameat, renameat2 \- ファイルの名前や位置を変更する
 .SH 書式
+.nf
 \fB#include <stdio.h>\fP
 .sp
 \fBint rename(const char *\fP\fIoldpath\fP\fB, const char *\fP\fInewpath\fP\fB);\fP
+.sp
+\fB#include <fcntl.h>           \fP/* AT_* 定数の定義 */
+\fB#include <stdio.h>\fP
+.sp
+\fBint renameat(int \fP\fIolddirfd\fP\fB, const char *\fP\fIoldpath\fP\fB,\fP
+\fB             int \fP\fInewdirfd\fP\fB, const char *\fP\fInewpath\fP\fB);\fP
+
+\fBint renameat2(int \fP\fIolddirfd\fP\fB, const char *\fP\fIoldpath\fP\fB,\fP
+\fB              int \fP\fInewdirfd\fP\fB, const char *\fP\fInewpath\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP
+.fi
+.sp
+.in -4n
+glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
+.in
+.sp
+\fBrenameat\fP():
+.PD 0
+.ad l
+.RS 4
+.TP  4
+glibc 2.10 以降:
+_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
+.TP 
+glibc 2.10 より前:
+.\" FIXME . need to define FTMs for renameat2(), once it hits glibc
+_ATFILE_SOURCE
+.RE
+.ad
+.PD
 .SH 説明
 \fBrename\fP()  はファイルの名前を変更し、必要ならばディレクトリ間の移動を行なう。 そのファイルに対する (\fBlink\fP(2)
 を使用して作られた) 他のハードリンク (hard link) には影響はない。 オープン済の \fIoldpath\fP
-に対するファイルディスクリプタにも影響はない。
\81«å¯¾ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81«ã\82\82å½±é\9f¿ã\81¯ã\81ªã\81\84ã\80\82
 
 \fInewpath\fP が既に存在する場合、それは不可分操作で (atomically) 置き換えられる (ただし、いくつかの条件がある;
 以下の「エラー」のセクションを参照)。 そのため、 \fInewpath\fP にアクセスしようとしている他のプロセスがファイルを見失うことはない (訳註:
@@ -76,6 +107,34 @@ rename \- ファイルの名前や位置を変更する
 
 \fIoldpath\fP がシンボリックリンク (symbolic link) を参照している場合は、 リンクの名前が変更される。 また、
 \fInewpath\fP がシンボリックリンクを参照している場合は、リンクが上書きされる。
+.SS renameat()
+\fBrenameat\fP() システムコールは \fBrename\fP() と全く同様に動作するが、以下で説明する点が異なる。
+
+\fIoldpath\fP で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター \fIolddirfd\fP
+が参照するディレクトリに対する相対パスと解釈される (\fBrename\fP(2)
+に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
+
+\fIoldpath\fP で指定されたパス名が相対パスで、 \fIolddirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 (\fBrename\fP(2)
+と同様に) \fIoldpath\fP は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
+
+\fIoldpath\fP で指定されたパス名が絶対パスの場合、 \fIolddirfd\fP は無視される。
+
+\fInewpath\fP の解釈は \fIoldpath\fP と同じである。 相対パスのパス名がファイルディスクリプター \fInewdirfd\fP
+が参照するディレクトリと解釈される点だけが異なる。
+
+\fBrenameat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。
+.SS renameat2()
+\fBrenameat2\fP() には追加の \fIflags\fP 引き数がある。 \fIflags\fP 引き数が 0 の \fBrenameat2\fP()
+の呼び出しは \fBrenameat\fP() と等価である。
+
+\fIflags\fP 引き数は、以下のフラグの 0 個以上のビットマスクである。
+.TP 
+\fBRENAME_NOREPLACE\fP
+rename の \fInewpath\fP を上書きしない。 \fInewpath\fP がすでに存在する場合エラーを返す。
+.TP 
+\fBRENAME_EXCHANGE\fP
+\fIoldpath\fP と \fInewpath\fP をアトミックに入れ換える。 両方のパス名が存在しなければならないが、 ファイル種別は異なっていてもよい
+(例えば、一方は空でないディレクトリで、もう一方はシンボリックリンクであるなど)。
 .SH 返り値
 成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。
 .SH エラー
@@ -83,7 +142,7 @@ rename \- ファイルの名前や位置を変更する
 \fBEACCES\fP
 \fIoldpath\fP または \fInewpath\fP を含んでいるディレクトリの書き込み許可がない。 または、 \fIoldpath\fP または
 \fInewpath\fP のディレクトリ部分のどれかに検索許可がない。 または、 \fIoldpath\fP がディレクトリで (\fI..\fP
-エントリを更新するのに必要な) 書き込み許可がない (\fBpath_resolution\fP(7)  も参照)。
\82¨ã\83³ã\83\88ã\83ªã\83¼ã\82\92æ\9b´æ\96°ã\81\99ã\82\8bã\81®ã\81«å¿\85è¦\81ã\81ª) æ\9b¸ã\81\8dè¾¼ã\81¿è¨±å\8f¯ã\81\8cã\81ªã\81\84 (\fBpath_resolution\fP(7)  ã\82\82å\8f\82ç\85§)ã\80\82
 .TP 
 \fBEBUSY\fP
 \fIoldpath\fP または \fInewpath\fP がディレクトリで、何らかのプロセスが使用中
@@ -93,7 +152,7 @@ rename \- ファイルの名前や位置を変更する
 ただし、そのような状況で、システムが他に返すエラーがない場合には \fBEBUSY\fP を返すことが許されている。)
 .TP 
 \fBEDQUOT\fP
-ディスクブロックか inode がそのファイルシステムのユーザクォータに達していた。
\83\87ã\82£ã\82¹ã\82¯ã\83\96ã\83­ã\83\83ã\82¯ã\81\8b inode ã\81\8cã\81\9dã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\81®ã\83¦ã\83¼ã\82¶ã\83¼ã\82¯ã\82©ã\83¼ã\82¿ã\81«é\81\94ã\81\97ã\81¦ã\81\84ã\81\9fã\80\82
 .TP 
 \fBEFAULT\fP
 \fIoldpath\fP や \fInewpath\fP がアクセス可能なアドレス空間の外を指している。
@@ -123,7 +182,7 @@ rename \- ファイルの名前や位置を変更する
 十分なカーネルメモリーがない。
 .TP 
 \fBENOSPC\fP
-そのファイルを含んでいるデバイスに新しいディレクトリエントリを 作成するための空きがない。
\81\9dã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92å\90«ã\82\93ã\81§ã\81\84ã\82\8bã\83\87ã\83\90ã\82¤ã\82¹ã\81«æ\96°ã\81\97ã\81\84ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\82\92 ä½\9cæ\88\90ã\81\99ã\82\8bã\81\9fã\82\81ã\81®ç©ºã\81\8dã\81\8cã\81ªã\81\84ã\80\82
 .TP 
 \fBENOTDIR\fP
 \fIoldpath\fP か \fInewpath\fP に含まれているディレクトリ部分が 実際にはディレクトリでない。 または \fIoldpath\fP
@@ -148,16 +207,54 @@ rename \- ファイルの名前や位置を変更する
 \fIoldpath\fP と \fInewpath\fP が同じマウントされたファイルシステムに存在しない。 (Linux は 1
 つのファイルシステムを複数のマウント位置に マウントすることを許可している。 しかし \fBrename\fP()
 は、たとえ同じファイルシステムであっても、 別々のマウント位置を跨いでは動作しない。)
+.PP
+\fBrenameat\fP() と \fBrenameat2\fP() では以下のエラーも発生する。
+.TP 
+\fBEBADF\fP
+\fIolddirfd\fP か \fInewdirfd\fP が有効なファイルディスクリプターでない。
+.TP 
+\fBENOTDIR\fP
+\fIoldpath\fP が相対パスで、 \fIolddirfd\fP がディレクトリ以外のファイルを参照している。または \fInewpath\fP と
+\fInewdirfd\fP に関して同じ状況である。
+.PP
+\fBrenameat2\fP() では以下のエラーも発生する。
+.TP 
+\fBEEXIST\fP
+\fIflags\fP に \fBRENAME_NOREPLACE\fP が指定されているが、 \fInewpath\fP がすでに存在する。
+.TP 
+\fBEINVAL\fP
+\fIflags\fP に無効なフラグが指定された。 \fBRENAME_NOREPLACE\fP と \fBRENAME_EXCHANGE\fP の両方が指定された。
+.TP 
+\fBEINVAL\fP
+\fIflags\fP にファイルシステムでサポートされていないフラグが指定された。
+.TP 
+\fBENOENT\fP
+\fIflags\fP に \fBRENAME_EXCHANGE\fP が指定されたが、 \fInewpath\fP が存在しない。
+.SH バージョン
+\fBrenameat\fP()  はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 で glibc
+に追加された。
+
+.\" FIXME . glibc support is pending.
+\fBrenameat2\fP()  はカーネル 2.6.16 で Linux に追加された。
 .SH 準拠
-4.3BSD, C89, C99, POSIX.1\-2001.
+\fBrename\fP(): 4.3BSD, C89, C99, POSIX.1\-2001, POSIX.1\-2008.
+
+\fBrenameat\fP(): POSIX.1\-2008.
+
+\fBrenameat2\fP()  は Linux 固有である。
+.SH 注意
+.SS "glibc での注意"
+\fBrenameat\fP() が利用できない古いカーネルでは、 glibc ラッパー関数は \fBrename\fP() を使用するモードにフォールバックする。
+\fIoldpath\fP と \fInewpath\fP が相対パスの場合、 glibc は \fIolddirfd\fP と \fInewdirfd\fP 引き数に対応する
+\fI/proc/self/fd\fP のシンボリックリンクに基づいてそれぞれパス名を構成する。
 .SH バグ
 NFS ファイルシステムでは、操作が失敗したからといって、 ファイルの名前が変更できなかったと決めてかかることはできない。 サーバが rename
 操作を終えてからクラッシュした場合、 サーバが再び立ち上がったときに、 再送信された RPC が処理されるが、これは失敗となる。
 アプリケーションはこの問題を正しく取り扱うことが期待されている。 同様の問題について \fBlink\fP(2)  にも書かれている。
 .SH 関連項目
-\fBmv\fP(1), \fBchmod\fP(2), \fBlink\fP(2), \fBrenameat\fP(2), \fBsymlink\fP(2),
-\fBunlink\fP(2), \fBpath_resolution\fP(7), \fBsymlink\fP(7)
+\fBmv\fP(1), \fBchmod\fP(2), \fBlink\fP(2), \fBsymlink\fP(2), \fBunlink\fP(2),
+\fBpath_resolution\fP(7), \fBsymlink\fP(7)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。