LINK(2)

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

ライブラリ
libc

書式
<unistd.h> int link(const char *name1, const char *name2)

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

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

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

戻り値

エラー
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() システムコールは p1003.1-90 に適合しています。

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

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