Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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 targetlinkpath がアクセス可能なアドレス空間の外を指している。

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

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

       ENAMETOOLONG
              target または linkpath が長過ぎる。

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

       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/ に書かれている。