EN JA
RENAME(2)
RENAME(2) FreeBSD System Calls Manual RENAME(2)

名称

renameファイル名を変更する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < stdio.h>

int
rename( const char *from, const char *to);

int
renameat( int fromfd, const char *from, int tofd, const char *to);

解説

rename() システムコールによって from と名づけられたリンクを to に変更します。 to がすでに存在する場合は、先にこれを削除します。 fromto は同じタイプでなければならず (両方ともディレクトリであるか、両方ともディレクトリではないか)、同じファイルシステム上に存在している必要があります。

to が既に存在する場合には、操作の途中でシステムがクラッシュしたとしても、 rename() システムコールは to のインスタンスが必ず存在することを保証します。

from の最後の構成要素がシンボリックリンクの場合、それが指しているファイルまたはディレクトリではなく、そのシンボリックリンクの名前が変更されます。

renameat() システムコールは、 from または to のいずれかが相対パスを指定する場合を除いて、 rename() と同等です。 from が相対パスであるなら、名前が変更されるファイルは、カレントワーキングディレクトリの代わりにファイル記述子 fromfd に関連しているディレクトリに相対的に位置付けられます。 to が相対パスであるなら、単に同じことが、 tofd に関連しているディレクトリに相対的に起こります。 renameat() が、 fromfd または tofd パラメータの特別な値 AT_FDCWD を渡されるなら、カレントワーキングディレクトリは、個別のパスパラメータのためのファイルの決定で使用されます。

戻り値

The rename() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

rename() システムコールは次の場合に失敗し、いずれの引数ファイルも影響を受けません:
[ ENAMETOOLONG]
いずれかのパス名の構成要素が 255 文字を越えているか、またはいずれかのパス名全体の長さが 1023 文字を越えています。
[ ENOENT]
from パスの構成要素が存在しないか、または to の前置パス名が存在しません。
[ EACCES]
指定されたパスには、検索が許可されていないディレクトリが含まれています。
[ EACCES]
指定されたリンクは、書み込みが許可されていないディレクトリへの書み込みを要求しています。
[ EACCES]
from 引数によって指されたディレクトリが、書き込みパーミッションを拒絶し、操作は、それを別の親ディレクトリに移動します。
[ EPERM]
from 引数によって指されたファイルには、不変、削除不可または追加専用フラグが設定されています、詳細については、 chflags(2) マニュアルページを参照してください。
[ EPERM]
from 引数によって指されたファイルの親ディレクトリには、不変または追加専用フラグが設定されています。
[ EPERM]
to 引数によって指されたファイルの親ディレクトリには、不変フラグが設定されています。
[ EPERM]
from ファイルを含むディレクトリにスティッキビットが設定されており、そのディレクトリと from のどちらの所有者も実効ユーザ ID とは異なっています。
[ EPERM]
to 引数によって指されるファイルが存在し、かつ to を含んでいるディレクトリにスティッキビットが設定されており、そのディレクトリと to ファイルのどちらの所有者も実効ユーザ ID とは異なっています。
[ ELOOP]
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
[ ENOTDIR]
パスの構成要素中にディレクトリ以外のものが含まれています。
[ ENOTDIR]
from 引数はディレクトリですが、 to はディレクトリではありません。
[ EISDIR]
to 引数はディレクトリですが、 from はディレクトリではありません。
[ EXDEV]
to によって指定されたリンク、および from によって指定されたファイルが異なる論理デバイス (ファイルシステム) 上にあります。実装がクロスデバイスリンクを許容する場合、このエラーコードは返らないことに注意してください。
[ ENOSPC]
ディレクトリを格納しているファイルシステム上の空間が枯渇したため、新しい名前のためのエントリを置くディレクトリを拡張できません。
[ EDQUOT]
ディレクトリを格納しているファイルシステム上のディスクブロックのユーザのクォータが枯渇したため、新しい名前のためのエントリを置くディレクトリを拡張できません。
[ EIO]
ディレクトリエントリを作成または更新している間に入出力エラーが発生しました。
[ EROFS]
指定されたリンクは、読み込み専用ファイルシステム上のディレクトリへの書み込みを要求しています。
[ EFAULT]
path は、プロセスに割り当てられたアドレス空間の範囲外を指しています。
[ EINVAL]
from 引数が to の親ディレクトリであるか、‘ .’または‘ ..’に名前を変更しようとしました。
[ ENOTEMPTY]
to 引数はディレクトリであり、空ではありません。

rename() によって返されたエラーに加えて renameat() は、次の場合に失敗します:

[ EBADF]
from 引数が、絶対パスを指定していません、そして fromfd 引数が、 AT_FDCWD でもなく検索のためにオープンされた有効なファイル記述子でもありません、または、 to 引数が、絶対パスを指定していません、そして tofd 引数が、 AT_FDCWD でもなく検索のためにオープンされた有効なファイル記述子でもありません。
[ ENOTDIR]
from 引数が、絶対パスではありません、そして fromfdAT_FDCWD でもなくディレクトリに関連しているファイル記述子でもありません、または to 引数が、絶対パスではありません、そして tofdAT_FDCWD でもなくディレクトリに関連しているファイル記述子でもありません。

関連項目

chflags(2), open(2), symlink(7)

規格

rename() システムコールは、 ISO/IEC 9945-1:1996 (“POSIX.1”) に適合しています。 renameat() システムコールは、The Open Group Extended API Set 2 仕様に適合しています。

歴史

renameat() システムコールは、 FreeBSD 8.0 で登場しました。
April 10, 2008 FreeBSD