SYMLINK(2)

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

書式
#include <unistd.h>

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

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

symlink():
    _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE >= 200112L

説明
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) も参照すること)。

EDQUOT
    The user's quota of resources on the file system has been exhausted. The resources could be inodes or disk blocks, depending on the file system implementation.

EEXIST
    newpath が既に存在する。

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

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

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

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

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

ENOMEM
    十分なカーネルメモリーがない。

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

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

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

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

準拠
SVr4, 4.3BSD, POSIX.1-2001.

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

関連項目
ln(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), symlinkat(2), unlink(2), path_resolution(7), symlink(7)

この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。