Scroll to navigation

SYMLINK(2) Linux Programmer's Manual 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 が適切に設定される。

エラー

newpath を含んでいるディレクトリへの書き込みが拒否されたか、 newpath に含まれているディレクトリのどれかに検索許可が与えられていない (path_resolution(7) も参照すること)。
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.
newpath が既に存在する。
oldpathnewpath がアクセス可能なアドレス空間の外を指している。
I/O エラーが発生した。
newpath を解決する際に遭遇したシンボリックリンクが多過ぎる。
oldpath または newpath が長過ぎる。
newpath に含まれるディレクトリ部分が存在しないか、壊れたリンクであるか、 oldpath が空文字列である。
十分なカーネルメモリーがない。
そのファイルを含んでいるデバイスに新しいディレクトリエントリを 作成するための空きがない。
newpath に含まれるディレクトリ部分が、実際には、ディレクトリではない。
newpath を含んでいるファイルシステム (file system) が シンボリックリンクの作成をサポートしていない。
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/ に書かれている。

2013-01-27 Linux