UNLINK(2)

名称
unlink - ディレクトリエントリの削除

ライブラリ
libc

書式
<unistd.h> int unlink(const char *path)

解説
unlink() システムコールは、 path で指定されたリンクをディレクトリから削除し、 そのリンクで参照されていたファイルのリンク数を減らします。 ファイルのリンク数が 0 になり、ファイルを開いているプロセスがなくなると、 ファイルに関連するすべてのリソースが再利用されます。 最後のリンクが削除されたときに、ファイルを開いているプロセスが 1 つ以上あると、リンクは削除されますが、ファイルの削除は、 そのファイルへのすべての参照が閉じられるまで延期されます。 path 引数は、ディレクトリであってはなりません。

戻り値

エラー
unlink() は、以下の場合に処理を失敗します。

[ENOTDIR]
    パスの構成要素中にディレクトリ以外のものが含まれています。

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

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

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

[EACCES]
    削除するリンクを含むディレクトリで、書込み許可が拒否されています。

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

[EPERM]
    指定されたファイルがディレクトリになっています。

[EPERM]
    ファイルを含むディレクトリがスティッキとマークされ、 削除するファイルを含むディレクトリまたはファイルが、 有効なユーザ ID に所有されていません。

[EBUSY]
    リンクを削除するエントリが、 マウント済みファイルシステムのマウントポイントです。

[EIO]
    ディレクトリエントリの削除中か、inode の割り当て解除中に 入出力エラーが発生しました。

[EROFS]
    指定されたファイルは読取り専用ファイルシステム上にあります。

[EFAULT]
    path 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。

関連項目
close(2), link(2), rmdir(2), symlink(7)

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

従来の unlink() システムコールでは、スーパユーザがディレクトリを削除できてしまい、 これによってファイルシステムの完全性が破壊されることがありました。 それを実行することは、すでに許可されなくなっています。