日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
UNLINK(2) FreeBSD システムコールマニュアル UNLINK(2)
名称
unlink, unlinkat, funlinkat -- ディレクトリエントリを削除する
ライブラリ
標準 C ライブラリ (libc, -lc)
書式
#include <unistd.h>
int
unlink(const char *path);
int
unlinkat(int dfd, const char *path, int flag);
int
funlinkat(int dfd, const char *path, int fd, int flag);
解説
unlink() システムコールは、そのディレクトリから path によって指定されたリ
ンクを削除し、リンクによって参照されたファイルのリンクカウントを減少しま
す。その減少によって、ファイルのリンクカウントが 0 となり、ファイルをオー
プンしているプロセスがなくなるなら、ファイルに関連したすべてのリソース
は、再利用されます。最後のリンクが削除されるとき、1 つ以上のプロセスに
オープンしているファイルがあるなら、リンクは、削除されますが、ファイルの
削除は、そのファイルへのすべての参照がクローズされるまで、遅延されます。
path 引数は、ディレクトリであってはなりません。
unlinkat() システムコールは、path が相対的なパスを指定する場合を除いて、
unlink() または rmdir() と同様です。この場合に、削除されるディレクトリエ
ントリは、カレントワーキングディレクトリの代わりに、ファイル記述子 dfd に
関連しているディレクトリに相対的に決定されます。
flag のための値は、<fcntl.h> で定義され、次のリストからフラブのビット単位
の包括的論理和 (OR) によって構成されます:
AT_REMOVEDIR
通常のファイルではなく、ディレクトリとして fd と path によって指
定されたディレクトリエントリを削除します。
AT_RESOLVE_BENEATH
fd 記述子によって指定されたディレクトリ下のパスのみをウォークしま
す。open(2) マニュアルページの O_RESOLVE_BENEATH フラグの説明を参
照してください。
unlinkat() が、fd パラメータの特別な値 AT_FDCWD を渡されるなら、カレント
ワーキングディレクトリが、使用され、振る舞いは、AT_REMOVEDIR ビットがフラ
グに設定されているかどうかに依存して、それぞれ unlink または rmdir への呼
び出しと同様です。
funlinkat() システムコールは、そのファイルが、それがオープンされてから置
き換えられないなら、すでにオープンされていたファイルをアンリンクするため
に使用することができます。それは、path がファイル記述子 fd としてオープン
されている場合に unlinkat() と同等です。そうでなければ、パスは、削除され
ず、エラーが、返されます。fd を FD_NONE に設定することができます。その場
合に、funlinkat() は、unlinkat() のように正確に振る舞います。
戻り値
関数 unlink() は、処理が成功すると値 0 を返します。そうでない場合、値 -1
が返され、グローバル変数 errno にエラーを示す値が設定されます。
エラー
unlink() は、次の場合を除いて成功します:
[ENOTDIR] パス接頭辞の構成要素がディレクトリではありません。
[EISDIR] 指定されたファイルが、ディレクトリです。
[ENAMETOOLONG] パス名の構成要素が、255 文字を越えているか、または全体
のパス名が、1023 文字を越えています。
[ENOENT] 指定されたファイルが存在しません。
[EACCES] 検索パーミッションが、パス接頭辞の構成要素に対して拒否
されました。
[EACCES] 書み込みパーミッションが、削除されるリンクを含んでいる
ディレクトリで、拒否されました。
[ELOOP] パス名を変換するときにあまりに多くのシンボリックリンク
に遭遇しました。
[EPERM] 指定されたファイルがディレクトリです。
[EPERM] 指定されたファイルには、不変、削除不可、または、追加専
用フラグが設定されています、詳細については、chflags(2)
マニュアルページを参照してください。
[EPERM] 指定されたファイルの親のディレクトリには、不変のフラグ
または、追加専用フラグが設定されています。
[EPERM] ファイルを含むディレクトリがスティッキとマークされ、
ディレクトリを含んでいるのでもなく削除されるファイルで
もないファイルが実効ユーザ ID によって所有されていませ
ん。
[EIO] ディレクトリエントリの削除しているか、または inode の
割り付け解除の間に I/O エラーが起こりました。
[EINTEGRITY] 破損したデータが、ファイルシステムから読み込む間に検出
されました。
[EROFS] 指定されたファイルが、読み込み専用のファイルシステムに
存在します。
[EFAULT] path 引数が、プロセスの割り付けられたアドレス空間の外
側を指しています。
[ENOSPC] copy-on-write またはスナップショットをサポートしている
ファイルシステムで、ファイルの削除操作のためのメタデー
タを記録するために、十分な空き空間がありませんでした。
unlink() によって返されたエラーに加えて unlinkat() は、次の場合に失敗しま
す:
[EBADF] path 引数が、絶対パスを指定していません、そして fd 引
数が、AT_FDCWD でもなく検索のためにオープンされた有効
なファイル記述子でもありません。
[ENOTEMPTY] flag パラメータには、AT_REMOVEDIR ビットの設定があり、
path 引数が空のディレクトリでないディレクトリを指定す
るか、またはドット (.) 以外のディレクトリか、または
ドットドット (..) の単一のエントリへのハードリンクがあ
ります。
[ENOTDIR] flag パラメータには、AT_REMOVEDIR ビットの設定があり、
path がディレクトリを指定していません。
[EINVAL] flag 引数の値が、有効ではありません。
[ENOTDIR] path 引数が、絶対パスではなく、fd が、AT_FDCWD でもな
くディレクトリに関連しているファイル記述子でもありませ
ん。
[ENOTCAPABLE] path が絶対パスであるか、または fd によって指定された
ディレクトリの階層構造の外側のディレクトリを先導する
".." 構成要素を含んでいます、そしてプロセスは、ケーパ
ビリティモード、または AT_RESOLVE_BENEATH フラグが指定
されました。
unlinkat() によって返されたエラーに加えて、funlinkat() は、次の場合に失敗
します:
[EDEADLK] ファイル記述子が、パスと関連していません。
関連項目
chflags(2), close(2), link(2), rmdir(2), symlink(7)
規格
unlinkat() システムコールは、The Open Group Extended API Set 2 仕様に従っ
ています。
歴史
unlink() 関数は、Version 1 AT&T UNIX で登場しました。unlinkat() システム
コールは FreeBSD 8.0 で登場しました。funlinkat() システムコールは、
FreeBSD 13.0 で登場しました。
伝統的な unlink() システムコールによって、スーパユーザは、ファイルシステ
ムの整合性に損傷を受けるかもしれないディレクトリをアンリンクすることがで
きます。この実装は、もはやそれを許可しません。
FreeBSD 13.2 February 23, 2021 FreeBSD 13.2