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.