symlink
Section: System Calls (2)
Updated: 2026-02-08
Index
JM Home Page
roff page
名前
symlink, symlinkat - ファイルに新しい名前を付ける
ライブラリ
標準 C ライブラリ (libc,~-lc)
書式
#include <unistd.h>
int symlink(const char *target, const char *linkpath);
#include <fcntl.h> /* Definition of AT_* constants */
#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():
Since glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Before glibc 2.10:
_ATFILE_SOURCE
説明
symlink() は target という文字列をファイルの内容として持つ linkpath というシンボリックリンク
(symbolic link) を作成する。
シンボリックリンクは実行時に解釈され、 リンクの内容でパスを置き換えて、そのパスを辿ることで、 ファイルやディレクトリに到達する。
シンボリックリンクはパスの部分に .. を含むかもしれない。これは (もしリンクの最初に使用された場合は) リンクの
存在するディレクトリの親ディレクトリが参照される。
A symbolic link (also known as a soft link) may point to an existing file
or to a nonexistent one; the latter case is known as a dangling link.
The permissions of a symbolic link are irrelevant; the ownership is ignored
when following the link (except when the protected_symlinks feature is
enabled, as explained in proc(5)), but is checked when removal or
renaming of the link is requested and the link is in a directory with the
sticky bit (S_ISVTX) set.
linkpath が存在する場合には上書きはされない。
symlinkat()
symlinkat() システムコールは symlink() と全く同様に動作するが、以下で説明する点が異なる。
linkpath で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター newdirfd
が参照するディレクトリに対する相対パスと解釈される (symlink()
に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
linkpath で指定されたパス名が相対パスで、 newdirfd が特別な値 AT_FDCWD の場合、
(symlink() と同様に) linkpath は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
linkpath で指定されたパス名が絶対パスの場合、 newdirfd は無視される。
See openat(2) for an explanation of the need for symlinkat().
返り値
On success, zero is returned. On error, -1 is returned, and errno is set
to indicate the error.
エラー
- EACCES
-
linkpath を含んでいるディレクトリへの書き込みが拒否されたか、 linkpath
に含まれているディレクトリのどれかに検索許可が与えられていない (path_resolution(7) も参照すること)。
- EBADF
-
(symlinkat()) linkpath is relative but newdirfd is neither
AT_FDCWD nor a valid file descriptor.
- EDQUOT
-
そのファイルシステムのリソース使用量がユーザークォータに達している。対象となるリソースは inode
かディスクブロックで、どちらになるかはファイルシステムの実装依存である。
- EEXIST
-
linkpath が既に存在する。
- EFAULT
-
target や linkpath がアクセス可能なアドレス空間の外を指している。
- EIO
-
I/O エラーが発生した。
- ELOOP
-
linkpath を解決する際に遭遇したシンボリックリンクが多過ぎる。
- ENAMETOOLONG
-
target または linkpath が長過ぎる。
- ENOENT
-
linkpath に含まれるディレクトリ部分が存在しないか、壊れたリンクであるか、 target か linkpath
が空文字列である。
- ENOENT
-
(symlinkat()) linkpath is a relative pathname and newdirfd refers
to a directory that has been deleted.
- ENOMEM
-
十分なカーネルメモリーがない。
- ENOSPC
-
そのファイルを含んでいるデバイスに新しいディレクトリエントリーを 作成するための空きがない。
- ENOTDIR
-
linkpath に含まれるディレクトリ部分が、実際には、ディレクトリではない。
- ENOTDIR
-
(symlinkat()) linkpath is relative and newdirfd is a file
descriptor referring to a file other than a directory.
- EPERM
-
linkpath を含んでいるファイルシステム (file system) が シンボリックリンクの作成をサポートしていない。
- EROFS
-
linkpath が読み込み専用のファイルシステムに存在している。
標準規格
POSIX.1-2024.
歴史
- symlink()
-
SVr4, 4.3BSD, POSIX.1-2001.
- symlinkat()
-
POSIX.1-2008. Linux 2.6.16, glibc 2.4.
glibc notes
symlinkat() が利用できない古いカーネルでは、 glibc ラッパー関数は symlink()
を使用するモードにフォールバックする。 pathname が相対パスの場合、 glibc は newdirfd 引数に対応する
/proc/self/fd のシンボリックリンクに基づいてパス名を構成する。
注意
target についてのチェックは行なわれない。
シンボリックリンクによって参照される名前を削除すると (それが他にハードリンク (hard link) を持たなければ) 実際にファイルが削除される。
この動作が望んだものでない場合は、 link(2) を使用すること。
関連項目
ln(1), namei(1), lchown(2), link(2), lstat(2), open(2),
readlink(2), rename(2), unlink(2), path_resolution(7),
symlink(7)
Index
- 名前
-
- ライブラリ
-
- 書式
-
- 説明
-
- symlinkat()
-
- 返り値
-
- エラー
-
- 標準規格
-
- 歴史
-
- glibc notes
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.