SYMLINK(2) | Linux Programmer's Manual | SYMLINK(2) |
symlink, symlinkat - ファイルに新しい名前を付ける
#include <unistd.h> int symlink(const char *target, const char *linkpath); #include <fcntl.h> /* AT_* 定数の定義 */ #include <unistd.h> int symlinkat(const char *target, int newdirfd, const char *linkpath);
glibc
向けの機能検査マクロの要件
(feature_test_macros(7) 参照):
symlink():
symlinkat():
symlink() は target という文字列をファイルの内容として持つ linkpath というシンボリックリンク (symbolic link) を作成する。
シンボリックリンクは実行時に解釈され、 リンクの内容でパスを置き換えて、そのパスを辿ることで、 ファイルやディレクトリに到達する。
シンボリックリンクはパスの部分に .. を含むかもしれない。これは (もしリンクの最初に使用された場合は) リンクの 存在するディレクトリの親ディレクトリが参照される。
シンボリックリンクは (ソフトリンク (soft link) とも呼ばれ) 存在するファイルを指しているかもしれないし、 存在しないファイルを指しているかもしれない; 後者の場合は壊れたリンク (dangling link) とも呼ばれる。
シンボリックリンクの許可 (permission) は無意味である; リンクを追跡する場合には所有権 (ownership) は無視される。 ただし、リンクの削除や名前の変更が要求され、かつリンクが存在する ディレクトリにスティッキービット (sticky bit) (S_ISVTX) が設定されている場合には、所有権のチェックが行われる。
linkpath が存在する場合には上書きはされない。
symlinkat() システムコールは symlink() と全く同様に動作するが、以下で説明する点が異なる。
linkpath で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター newdirfd が参照するディレクトリに対する相対パスと解釈される (symlink() に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
linkpath で指定されたパス名が相対パスで、 newdirfd が特別な値 AT_FDCWD の場合、 (symlink() と同様に) linkpath は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
linkpath で指定されたパス名が絶対パスの場合、 newdirfd は無視される。
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。
symlinkat() では以下のエラーも発生する。
symlinkat() はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 で glibc に追加された。
symlink(): SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.
symlinkat(): POSIX.1-2008.
target についてのチェックは行なわれない。
シンボリックリンクによって参照される名前を削除すると (それが他にハードリンク (hard link) を持たなければ) 実際にファイルが削除される。 この動作が望んだものでない場合は、 link(2) を使用すること。
symlinkat() が利用できない古いカーネルでは、 glibc ラッパー関数は symlink(2) を使用するモードにフォールバックする。 pathname が相対パスの場合、 glibc は newdirfd 引き数に対応する /proc/self/fd のシンボリックリンクに基づいてパス名を構成する。
ln(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), unlink(2), path_resolution(7), symlink(7)
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2014-08-19 | Linux |