LINK(2)

名前
link - ファイルの新しい名前を作成する

書式
#include <unistd.h>

int link(const char *oldpath, const char *newpath);

説明
link は存在するファイルへの新しいリンク(link)(ハード・リンク(hard link)と もいう)を作成する。 newpath が存在する場合には上書きはされ ない。 この新しい名前は全ての操作において古い名前と完全に同じように使用される; 両方の名前は同じファイルを参照しており(それで同じ、許可(permission)や 所有者(ownership)となる)、どちらの名前が「本来」のものであるか判別できない。

返り値
成功した場合はゼロが返される。エラーの場合は -1 が返され、 errno が適切に設定される。

エラー

EXDEV
    oldpath と newpath が同じファイル・システムに存在しない。

EPERM
    oldpath と newpath を含んでいるファイル・システムがハード・リンクをサポートしていない。

EFAULT
    oldpath または newpath がアクセス可能なアドレス空間の外を指している。

EACCES
    プロセスの実効(effective)ユーザーID に newpath を含んでいるディレクトリへの書き込みが許されていないか、 oldpath または newpath へのディレクトリのどれかに検索(実行)許可がない。

ENAMETOOLONG
    oldpath または newpath が長過ぎる。

ENOENT
    oldpath または newpath のディレクトリ部分が存在しないか、 壊れた(dangling)シンボリック・リンクである。

ENOTDIR
    oldpath または newpath のディレクトリ部分が、実際には、ディレクトリでない。

ENOMEM
    カーネルに十分なディレクトリがない。

EROFS
    ファイルが読み込み専用のファイル・システムに存在する。

EEXIST
    newpath が既に存在する。

EMLINK
    oldpath によって参照されるファイルは 既に最大数までのリンクを持っている。

ELOOP
    oldpath または newpath を解決する際に遭遇したシンボリック・リンクが多過ぎる。

ENOSPC
    そのファイルを含んでいるデバイルに新しいディレクトリ・エントリを 作成するための空きがない。

EPERM
    oldpath がディレクトリである。 EIO I/O エラーが発生した。

注意
link でファイル・システムを超えてハード・リンクを作成することはできない。 このような場合は symlink を使用すること。

準拠
SVr4, SVID, POSIX, BSD 4.3, X/OPEN. SVr4 は他に ENOLINK, EMULTIHOP エラー状態についても記述している。POSIX.1 には ELOOP についての記述はない。 X/OPEN には EFAULT, ENOMEM, EIO についての記述はない。

バグ
NFS ファイル・システム では、NFS サーバーがリンクを作成した後に、 それを伝える前に死んだ場合には返り値が不正な場合がある。 リンクが作成できたかどうか見つけるためには stat(2) を使用すること。

関連項目
symlink(2), unlink(2), rename(2), open(2), stat(2), ln(1)