other versions
other sections
RENAME(2) | Linux Programmer's Manual | RENAME(2) |
名前¶
rename - ファイルの名前や位置を変更する書式¶
#include <stdio.h>説明¶
rename() はファイルの名前を変更し、必要ならばディレクトリ間の移動を行なう。 そのファイルに対する ( link(2) を使用して作られた) 他のハードリンク (hard link) には影響はない。 オープン済の oldpath に対するファイルディスクリプタにも影響はない。返り値¶
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。エラー¶
- EACCES
- oldpath または newpath を含んでいるディレクトリの書き込み許可がない。 または、 oldpath または newpath のディレクトリ部分のどれかに検索許可がない。 または、 oldpath がディレクトリで ( .. エントリを更新するのに必要な) 書き込み許可がない ( path_resolution(7) も参照)。
- EBUSY
- oldpath または newpath がディレクトリで、何らかのプロセスが使用中 (多分、カレントワーキングディレクトリか、ルートディレクトリか、 読み込みのためにオープンされているかでろう) もしくは、システムが使用中 (例えばマウントポイントである) であり、システムがこれをエラーであると判断したために rename が失敗した。 (このような場合に EBUSY を返すことは規格では要求されていない点に注意すること。 このような場合に、rename をとにかく実行してみるのは何の問題もない。 ただし、そのような状況で、システムが他に返すエラーがない場合には EBUSY を返すことが許されている。)
- EFAULT
- oldpath や newpath がアクセス可能なアドレス空間の外を指している。
- EINVAL
- newpath が oldpath のパス部分を含んでいる。ディレクトリを自分自身のサブディレクトリに 変更しようとした場合がほとんどである。
- EISDIR
- newpath は存在しているディレクトリであるが、 oldpath はディレクトリでない。
- ELOOP
- oldpath または newpath を解決する際に遭遇したシンボリックリンクが多過ぎる。
- EMLINK
- oldpath は既に最大数までのリンクを持っているか、それがディレクトリで newpath を含んでいるディレクトリが最大数までのリンクを持っている。
- ENAMETOOLONG
- oldpath または newpath が長過ぎる。
- ENOENT
- oldpath という名前のリンクが存在しない。 または、 newpath というディレクトリが存在しない。 または、 oldpath か newpath が空の文字列である。
- ENOMEM
- 十分なカーネルメモリーがない。
- ENOSPC
- そのファイルを含んでいるデバイスに新しいディレクトリエントリを 作成するための空きがない。
- ENOTDIR
- oldpath か newpath に含まれているディレクトリ部分が 実際にはディレクトリでない。 または oldpath がディレクトリで、 newpath が存在してディレクトリでない。
- ENOTEMPTY または EEXIST
- newpath が空でないディレクトリである。すなわち "." と ".." 以外を含んでいる。
- EPERM または EACCES
- oldpath のあるディレクトリにスティッキービット (sticky bit) ( S_ISVTX) が設定されており、 プロセスの実効ユーザー ID が 削除しようとするファイルのユーザー ID と そのファイルを含むディレクトリのユーザー ID のいずれとも一致せず、かつ プロセスに特権がない (Linux では CAP_FOWNER ケーパビリティ (capability) がない)。 または、 newpath がすでに存在するファイルで、親ディレクトリにスティッキービットが設定されており、 プロセスの実効ユーザー ID が 置き換えようとするファイルのユーザー ID と そのファイルを含むディレクトリのユーザー ID のいずれとも一致せず、かつ プロセスに特権がない (Linux では CAP_FOWNER ケーパビリティがない)。 または oldpath と newpath が存在するファイルシステムが、要求された種類の名前の変更を サポートしていない。
- EROFS
- ファイルが読み込み専用のファイルシステムに存在する。
- EXDEV
- oldpath と newpath が同じマウントされたファイルシステムに存在しない。 (Linux は 1 つのファイルシステムを複数のマウント位置に マウントすることを許可している。 しかし rename() は、たとえ同じファイルシステムであっても、 別々のマウント位置を跨いでは動作しない。)
準拠¶
4.3BSD, C89, C99, POSIX.1-2001.バグ¶
NFS ファイルシステムでは、操作が失敗したからといって、 ファイルの名前が変更できなかったと決めてかかることはできない。 サーバが rename 操作を終えてからクラッシュした場合、 サーバが再び立ち上がったときに、 再送信された RPC が処理されるが、これは失敗となる。 アプリケーションはこの問題を正しく取り扱うことが期待されている。 同様の問題について link(2) にも書かれている。関連項目¶
mv(1), chmod(2), link(2), renameat(2), symlink(2), unlink(2), path_resolution(7), symlink(7)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2009-03-30 | Linux |