名前
renameat - ディレクトリファイルディスクリプタから相対的な位置にあるファイルの名前を変更する
書式
#define _ATFILE_SOURCE
#include <stdio.h>
int renameat(int olddirfd, const char *oldpath,
int newdirfd, const char *newpath);
説明
renameat() システムコールは、この man ページで説明している違いがある以外は、 rename(2) と全く同じように動作する。
oldpath で指定されるパス名が相対パスである場合、 ファイルディスクリプタ olddirfd で参照されるディレクトリからの相対パス名として解釈される (rename(2) では、相対パスは呼び出し元プロセスのカレントワーキングディレクトリからの 相対パスとなる)。
oldpath が相対パスであり、かつ olddirfd が特別な値 AT_FDCWD である場合、 oldpath は (rename(2) と同じように) 呼び出し元プロセスの カレントワーキングディレクトリからの相対パス名として解釈される。
oldpath が絶対パスである場合、 olddirfd は無視される。
newpath の解釈は oldpath と同様であるが、 相対パス名はファイルディスクリプタ newdirfd で参照されるディレクトリからの相対パス名として解釈される。
返り値
成功した場合、 renameat() は 0 を返す。 エラーの場合、-1 が返されて、 errno にはエラーを示す値が設定される。
エラー
rename(2) と同じエラーが renameat() でも起こる。 renameat() では、その他に以下のエラーが起こる:
EBADF | olddirfd または newdirfd が有効なファイルディスクリプタでない。 |
ENOTDIR | |
oldpath が相対パスで、かつ olddirfd がディレクトリ以外のファイルを参照するファイルディスクリプタである。 または newpath と newdirfd について、同様のことが起きている。 | |
バージョン
renameat() は Linux カーネル 2.6.16 で追加された。
準拠
このシステムコールは標準的ではないが、 POSIX.1 の将来のリビジョンに含めることが提案されている。
注意
renameat() が必要な理由については、 openat(2) を参照すること。