rename

RENAME(2)                   Linux Programmer's Manual                  RENAME(2)



名前
       rename - ファイルの名前や位置を変更する

書式
       #include <unistd.h>

       int rename(const char *oldpath, const char *newpath);

説明
       rename はファイルの名前を変え、必要ならばディレクトリ間の移動を行なう。

       他のそのファイルへの( link を使用して作られた ) ハード・リンク(hard link)には影響はない。

       もし newpath が既に存在していた場合にはそれは自動的に上書き(overwrite)される (いくつかの条件がある -
       以下のエラーを参照せよ)、それで、 newpath にアクセスしようとしている他のプロセスはそれを見失ってしまう。

       もし newpath が存在し、何らかの理由で操作が失敗したか、システムが クラッシュした場合、 rename newpath
       の実体を元のまま残すことを保証する。

       一方で、上書きを行なう時に oldpath newpath の両方でそのファイルを参照できる瞬間が存在する。

       もし oldpath がシンボリック・リンク(symbolic link)を参照している場合はリンクの 名前が変えられる; もし newpath
       がシンボリック・リンクを参照している場合はリンクが上書きされる。

返り値
       成功した場合はゼロを返す。エラーの場合は -1 を返し、 errno を適切に設定する。

エラー
       EISDIR  newpath は存在しているディレクトリである、しかし oldpath はディレクトリでない。

       EXDEV   oldpath newpath が同じファイル・システムに存在しない。

       ENOTEMPTY
               newpath が空でないディレクトリである。

       EBUSY   newpath が存在し、それがあるプロセスの現在のワーキング・ディレクトリ か、ルート・ディレクトリである。

       EEXIST  新しい pathname が古いものを一部を含んでいる。

       EINVAL  ディレクトリを自分自身のサブディレクトリに変更しようとした。

       EMLINK  oldpath は既に最大数までのリンクを持っているか、それがディレクトリで newpath
               を含んでいるディレクトリが最大数までのリンクを持っている。

       ENOTDIR oldpath newpath に含まれているディレクトリ部分が 実際にはディレクトリでない。

       EFAULT  oldpath または newpath がアクセス可能なアドレス空間の外を指している。

       EACCES  プロセスの実効(effective)ユーザーID に oldpath または newpath
               を含んでいるディレクトリの書き込み許可がないか、 oldpath または newpath
               のディレクトリ部分のどれかに検索(実行)許可がないか、 oldpath がディレクトリで( ..
               エントリーを更新するのに必要な)書き込み許可がない。

       EPERM   oldpath のあるディレクトリにスティッキー・ビット(sticky bit)が設定されており、 プロセスの実効ユーザーID
               が削除しようとするファイルのユーザーID とも それを含んでいるディレクトリのユーザーIDとも一致しない、または oldpath
               を含んでいるファイル・システムが要求したような型の名前の変更を サポートしていない。

       ENAMETOOLONG
               oldpath または newpath が長過ぎる。

       ENOENT  oldpath  または  newpath
               のディレクトリ部分が存在しないか、壊れた(dangling)シンボリック・リンクである。

       ENOMEM  カーネル(kernel)に十分なメモリ(memory)が存在しない。

       EROFS   ファイルが読み込み専用(read-only)ファイル・システムにある。

       ELOOP   oldpath または newpath を解決する際に遭遇したシンボリック・リンクが多過ぎる。

       ENOSPC  ファイルを含んでいるデバイスに新しいディレクトリ・エントリを 作成するための空きがない。


準拠
       POSIX, 4.3BSD, ANSI C

バグ
       NFS ファイル・システムでは、操作が失敗したからといって、 ファイルの名前が変更できなったと仮定することはできない。
       もしサーバー(server)が名前を変えてクラッシュした場合、 サーバーが再び立ち上がった時に処理された RPC は再送信され、
       失敗を引き起こす。アプリケーション がこれを取り扱うことを期待される。同様の問題に関して link(2) を参照せよ。

関連項目
       link(2), unlink(2), symlink(2), mv(1)



Linux 0.99.7                      24 July 1993                         RENAME(2)