EN JA
SYMLINK(2)
SYMLINK(2) FreeBSD System Calls Manual SYMLINK(2)

名称

symlink, symlinkatファイルへのシンボリックリンクの作成

ライブラリ

Standard C Library (libc, -lc)

書式

#include < unistd.h>

int
symlink( const char *name1, const char *name2);

int
symlinkat( const char *name1, int fd, const char *name2);

解説

name1 へのシンボリックリンク name2 が作成されます ( name2 は作成されるファイルの名前で、 name1 はシンボリックリンクの作成に使用される文字列です)。どちらの名前も任意のパス名です。ファイルが同じファイルシステムに存在する必要はありません。

symlinkat() システムコールは、 name2 が相対パスを指定する場合を除いて、 symlink() と同等です。この場合、シンボリックリンクは、カレントワーキングディレクトリの代わりにファイル記述子 fd に関連しているディレクトリに相対的に作成されます。 symlinkat() が、 fd パラメータの特別な値 AT_FDCWD を渡されるなら、カレントワーキングディレクトリが、使用され、振る舞いは、 symlink() への呼び出しと同じです。

戻り値

The symlink() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

以下のような場合、シンボリックリンクはエラーとなります:
[ ENOTDIR]
name2 パス接頭辞の構成要素は、ディレクトリではありません。
[ ENAMETOOLONG]
name2 パス接頭辞の構成要素が 255 文字を越えているか、またはパス名全体が 1023 文字を越えています。
[ ENOENT]
name2 パス接頭辞の構成要素が存在しません。
[ EACCES]
name2 パス接頭辞の構成要素に検索パーミッションが拒否されるか、書き込みパーミッションが作成されるファイルの親ディレクトリで拒否されました。
[ ELOOP]
name2 パス接頭辞を変換するときに遭遇されたシンボリックリンクが多すぎます。
[ EEXIST]
name2 引数で指されるパス名がすでに存在します。
[ EPERM]
name2 によって指定されたファイルの親のディレクトリには、不変フラグが設定されています、詳細については、 chflags(2) マニュアルページを参照してください。
[ EIO]
name2 のディレクトリエントリの作成中、または name2 の inode の割り当て中、あるいは name2 のリンクコンテンツの書き込み中に入出力エラーが発生しました。
[ EROFS]
ファイル name2 は読み込み専用ファイルシステム上にあります。
[ ENOSPC]
新しいシンボリックリンクを作成するディレクトリを含むファイルシステム上に空間が残っていないため、新しいシンボリックリンクを作成できません。
[ ENOSPC]
シンボリックリンクを含むファイルシステム上にシンボリックリンクを作る空間が残っていないため、新しいシンボリックリンクを作成できません。
[ ENOSPC]
シンボリックリンクを作成するファイルシステム上の inode が枯渇しました。
[ EDQUOT]
新しいシンボリックリンクのエントリを配置するディレクトリを含むファイルシステム上のユーザのディスクブロックが枯渇したため、作成できません。
[ EDQUOT]
シンボリックリンクを作るファイルシステム上のユーザのディスクブロックのクォータが枯渇したため、新しいシンボリックリンクを作成できません。
[ EDQUOT]
シンボリックリンクを作成するファイルシステム上のユーザの inode のクォータが枯渇しました。
[ EIO]
ディレクトリエントリの作成中、または inode の割り当て中に入出力エラーが発生しました。
[ EFAULT]
name1 引数または name2 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。

symlink() によって返されたエラーに加えて symlinkat() は、次の場合に失敗します:

[ EBADF]
name2 引数が、絶対パスを指定していません、そして fd 引数は、 AT_FDCWD でもなく検索のためにオープンされた有効なファイル記述子でもありません。
[ ENOTDIR]
name2 引数が、絶対パスではありません、そして fd が、 AT_FDCWD でもなくディレクトリに関連しているファイル記述子でもありません。

規格

symlinkat() システムコールは、The Open Group Extended API Set 2 仕様に適合しています。

歴史

symlink() システムコールは、 4.2BSD で登場しました。 symlinkat() システムコールは FreeBSD 8.0 で登場しました。
April 10, 2008 FreeBSD