SYMLINK(2)

名前
symlink - ファイルに新しい名前を付ける。

書式
#include <unistd.h>

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

説明
symlink は newpath という名前の oldpath へのシンボリック・リンク(symbolic link)を作成する。 シンボリック・リンクは実行時に解釈され、ファイルやディレクトリを見 つけるために、リンクの内容をたどり置き換えられる。 シンボリック・リンクはパスの部分に .. を含むかもしれない、これは(もしリンクの最初に使用された場合は)リンクの 存在するディレクトリの親ディレクトリが参照される。 シンボリック・リンクは(ソフト・リンク(soft link)としても知られており) 存在するファイルを指しているかもしれないし、存在しないファイルを指し ているかもしれない; 後者の場合は壊れたリンク(dangling link)として知ら れている。 シンボリック・リンクの許可(permission)は無意味である; リンクを追跡す る場合には所有権(ownership)は無視される。しかしリンクの削除や名前の 変更が要求され、ディレクトリにスティッキー・ビット(sticky bit)が設定 されていた場合にはチェックされる。 もし newpath が既に存在する場合には上書きはされない。

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

エラー

EPERM
    newpath を含んでいるファイル・システム(file system)がシンボリック・リンクを サポートしていない。

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

EACCES
    プロセスの実効(effective)ユーザーIDが newpath を含んでいるディレクトリについて書き込み許可を与えられていないか、 newpath に含まれているディレクトリのどれかに検索(実行)許可が与えられていない。

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

ENOENT
    newpath に含まれるディレクトリ部分が存在しないか、壊れたリンクであるか、 oldpath が空文字列である。

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

ENOMEM
    十分なカーネル(kernel)のメモリーがない。

EROFS
    newpath が読み込み専用のファイル・システムに存在している。

EEXIST
    newpath が既に存在している。

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

ENOSPC
    ファイルが含まれているデバイスに新しいディレクトリ・エントリ (directory entry)を作成するだけの十分な容量がない。

EIO I/O エラーが発生した。

注意
oldpath についてのチェックは行なわれない。 symlink によって参照される名前を削除すると(それが他にハード・リンク (hard link)を持たなければ)実際にファイルが削除される。もしこの動作が 望んだものでなれば link を使用すること。

準拠
SVr4, SVID, BSD 4.3, X/OPEN. SVr4 には他に EDQUOT, ENOSYS エラーについての記述がある。

バグ
open(2) を見て、同じ名前の重複と NFS について参照すること。

関連項目
readlink(2), link(2), unlink(2), rename(2), open(2), lstat(2), ln(1)