名前
symlink - ファイルに新しい名前を付ける
書式
#include <unistd.h>
int symlink(const char *oldpath, const char *newpath);
説明
symlink() は oldpath という文字列をファイルの内容として持つ newpath というシンボリック・リンク (symbolic link) を作成する。
シンボリック・リンクは実行時に解釈され、 リンクの内容でパスを置き換えて、そのパスを辿ることで、 ファイルやディレクトリに到達する。
シンボリック・リンクはパスの部分に .. を含むかもしれない。これは (もしリンクの最初に使用された場合は) リンクの 存在するディレクトリの親ディレクトリが参照される。
シンボリック・リンクは (ソフト・リンク (soft link) とも呼ばれ) 存在するファイルを指しているかもしれないし、 存在しないファイルを指しているかもしれない; 後者の場合は壊れたリンク (dangling link) とも呼ばれる。
シンボリック・リンクの許可 (permission) は無意味である; リンクを追跡する場合には所有権 (ownership) は無視される。 ただし、リンクの削除や名前の変更が要求され、かつリンクが存在する ディレクトリにスティッキー・ビット (sticky bit) (S_ISVTX) が設定されている場合には、所有権のチェックが行われる。
newpath が既に存在する場合には上書きはされない。
返り値
成功した場合には 0 を返す。エラーの場合には -1 を返し、 errno が適切に設定される。
エラー
EACCES | newpath を含んでいるディレクトリへの書き込みが拒否されたか、 newpath に含まれているディレクトリのどれかに検索許可が与えられていない (path_resolution(7) も参照すること)。 |
EEXIST | newpath が既に存在している。 |
EFAULT | oldpath や newpath がアクセス可能なアドレス空間の外を指している。 |
EIO | I/O エラーが発生した。 |
ELOOP | newpath を解決する際に遭遇したシンボリック・リンクが多過ぎる。 |
ENAMETOOLONG | |
oldpath または newpath が長過ぎる。 | |
ENOENT | newpath に含まれるディレクトリ部分が存在しないか、壊れたリンクであるか、 oldpath が空文字列である。 |
ENOMEM | 十分なカーネル (kernel) のメモリーがない。 |
ENOSPC | ファイルが含まれているデバイスに新しいディレクトリ・エントリ (directory entry) を作成するだけの十分な容量がない。 |
ENOTDIR | |
newpath に含まれるディレクトリ部分が、実際には、ディレクトリではない。 | |
EPERM | newpath を含んでいるファイル・システム (file system) が シンボリック・リンクの作成をサポートしていない。 |
EROFS | newpath が読み込み専用のファイル・システムに存在している。 |
準拠
SVr4, 4.3BSD, POSIX.1-2001.
注意
oldpath についてのチェックは行なわれない。
symlink によって参照される名前を削除すると (それが他にハード・リンク (hard link) を持たなければ) 実際にファイルが削除される。 この動作が望んだものでない場合は、 link(2) を使用すること。
関連項目
ln(1), link(2), lstat(2), open(2), readlink(2), rename(2), symlinkat(2), unlink(2), path_resolution(7)