スポンサーリンク

LINK(2) FreeBSD システムコールマニュアル LINK(2)

名称

link − ハードファイルリンクを作成する

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <unistd.h>

int

link(const char *name1, const char *name2);

解説

link() システムコールは、 name1 が指す下層オブジェクトの属性を持つ、指定 のディレクトリエントリ (ハードリンク) name2 を不可分に作成します。リンク が正常に完了すると下層オブジェクトのリンクカウントが増加します。 name1name2 は、下層オブジェクトへのアクセスとアクセス権を等しく共有します。

name1 を削除してもファイル name2 は削除されず、下層オブジェクトのリンクカ ウントが減少します。

name1 引数によって指されるオブジェクトはハードリンクが成功するために存在 している必要があり、 name1name2 の両方が同じファイルシステム上に存在 している必要があります。 name1 引数はディレクトリであってはなりません。

戻り値

関数 link() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が 返され、グローバル変数 errno が設定されてエラーを示します。

エラー

link() システムコールは次の場合に処理に失敗し、リンクは作成されません:

       [ENOTDIR]

いずれかの前置パス名の構成要素がディレクトリではありま せん。

[ENAMETOOLONG]
いずれかのパス名の構成要素が 255 文字を越えているか、 またはいずれかのパス名全体の長さが 1023 文字を越えてい ます。

[ENOENT]
いずれかの前置パス名の構成要素が存在しません。

[EOPNOTSUPP]
name1
によって指定されたファイルが入っているファイルシ ステムがリンクをサポートしていません。

[EMLINK]
name1
で指定されたファイルのリンクカウントが 32767 を 越えます。

[EACCES]
いずれかの前置パス名の構成要素について検索許可が拒否さ れています。

[EACCES]
要求されたリンクは、書込み許可を拒否するモードのディレ クトリに書き込むことを要求しています。

[ELOOP]
パス名を変換するときに検出されたシンボリックリンクが多 すぎます。

[ENOENT]
name1
によって指定されたファイルが存在しません。

[EEXIST]
name2
によって指定されたリンクが存在します。

[EPERM]
name1
によって指定されたファイルはディレクトリである か、変更禁止もしくは追加のみ可能であるとフラグが付けら れています ( chflags(2) 参照)。

[EXDEV]
name2
によって指定されたリンクと name1 によって指定さ れたファイルが異なるファイルシステム上にあります。

[ENOSPC]
ディレクトリを格納しているファイルシステムに容量が残っ ていないため、新しいリンクを入れるエントリを置くディレ クトリを拡張できません。

[EDQUOT]
ディレクトリを格納しているファイルシステムでユーザの ディスクブロックに関するクォータが枯渇したため、新しい リンクを入れるエントリを置くディレクトリを拡張できませ ん。

[EIO]
ディレクトリエントリを作成するためファイルシステムに読 み書きしている間に入出力エラーが発生しました。

[EROFS]
要求されたリンクは、読取り専用ファイルシステム上のディ レクトリに書込みすることを要求しています。

[EFAULT]
指定されたパス名の 1 つが、プロセスに割り当てられたア ドレス空間の範囲外を指しています。

関連項目

readlink(2), symlink(2), unlink(2)

規格

link() システムコールは ISO/IEC 9945-1:1990 (‘‘POSIX.1’’) に適合していま す。

歴史

link() 関数は Version 7 AT&T UNIX で登場しました。

従来、スーパユーザは link() システムコールによってディレクトリをリンクで き、これはファイルシステムの一貫性を破壊するものでした。この実装では、こ のような操作はもはや許されません。

FreeBSD 10.0 March 5, 1999 FreeBSD 10.0

スポンサーリンク