Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
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(): _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L || /* glibc 2.19 以前: */ _BSD_SOURCE symlinkat(): glibc 2.10 以降: _POSIX_C_SOURCE >= 200809L glibc 2.10 より前: _ATFILE_SOURCE
説明
symlink() は target という文字列をファイルの内容として持つ linkpath というシンボリックリ ンク (symbolic link) を作成する。 シンボリックリンクは実行時に解釈され、 リンクの内容でパスを置き換えて、そのパスを辿ること で、 ファイルやディレクトリに到達する。 シンボリックリンクはパスの部分に .. を含むかもしれない。これは (もしリンクの最初に使用され た場合は) リンクの 存在するディレクトリの親ディレクトリが参照される。 シンボリックリンクは (ソフトリンク (soft link) とも呼ばれ) 存在するファイルを指しているか もしれないし、 存在しないファイルを指しているかもしれない; 後者の場合は壊れたリンク (dangling link) とも呼ばれる。 シンボリックリンクの許可 (permission) は無意味である; リンクを追跡する場合には所有権 (ownership) は無視される。 ただし、リンクの削除や名前の変更が要求され、かつリンクが存在す る ディレクトリにスティッキービット (sticky bit) (S_ISVTX) が設定されている場合には、所有 権のチェックが行われる。 linkpath が存在する場合には上書きはされない。 symlinkat() symlinkat() システムコールは symlink() と全く同様に動作するが、以下で説明する点が異なる。 linkpath で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター newdirfd が参照するディレクトリに対する相対パスと解釈される (symlink() に相対パス名を渡した場合のよ うに、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。 linkpath で指定されたパス名が相対パスで、 newdirfd が特別な値 AT_FDCWD の場合、 (symlink() と同様に) linkpath は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと 解釈される。 linkpath で指定されたパス名が絶対パスの場合、 newdirfd は無視される。
返り値
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。
エラー
EACCES linkpath を含んでいるディレクトリへの書き込みが拒否されたか、 linkpath に含まれてい るディレクトリのどれかに検索許可が与えられていない (path_resolution(7) も参照する こと)。 EDQUOT そのファイルシステムのリソース使用量がユーザークォータに達している。対象となるリ ソースは inode かディスクブロックで、どちらになるかはファイルシステムの実装依存であ る。 EEXIST linkpath が既に存在する。 EFAULT target や linkpath がアクセス可能なアドレス空間の外を指している。 EIO I/O エラーが発生した。 ELOOP linkpath を解決する際に遭遇したシンボリックリンクが多過ぎる。 ENAMETOOLONG target または linkpath が長過ぎる。 ENOENT linkpath に含まれるディレクトリ部分が存在しないか、壊れたリンクであるか、 target か linkpath が空文字列である。 ENOMEM 十分なカーネルメモリーがない。 ENOSPC そのファイルを含んでいるデバイスに新しいディレクトリエントリーを 作成するための空き がない。 ENOTDIR linkpath に含まれるディレクトリ部分が、実際には、ディレクトリではない。 EPERM linkpath を含んでいるファイルシステム (file system) が シンボリックリンクの作成をサ ポートしていない。 EROFS linkpath が読み込み専用のファイルシステムに存在している。 symlinkat() では以下のエラーも発生する。 EBADF newdirfd が有効なファイルディスクリプターでない。 ENOENT linkpath が相対パス名で、 newdirfd が削除されたディレクトリを参照している。 ENOTDIR linkpath が相対パスで、 newdirfd がディレクトリ以外のファイルを参照しているファイル ディスクリプターである。
バージョン
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) を使用すること。 glibc での注意 symlinkat() が利用できない古いカーネルでは、 glibc ラッパー関数は symlink() を使用するモー ドにフォールバックする。 pathname が相対パスの場合、 glibc は newdirfd 引数に対応する /proc/self/fd のシンボリックリンクに基づいてパス名を構成する。
関連項目
ln(1), namei(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), unlink(2), path_resolution(7), symlink(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。