UNLINK(2) |
Linux Programmer's Manual |
UNLINK(2) |
名前
unlink -名前を削除し、場合によってはそれが参照しているファイルも削除する
書式
#include <unistd.h>
int unlink(const char *
pathname
);
説明
unlink() はファイルシステム上の名前を削除する。もしその名前がファイルへの最後のリンク (link) であり、どのプロセスもそのファイルをオープン (open) していなければ、ファイルは削除される。ファイルが使用していたディスク上の領域は再利用が可能になる。
もし削除する名前がファイルへの最後のリンクだが、どれかのプロセスがそのファイルをまだオープンしている場合は、そのファイルを参照している最後のファイルディスクリプタ (file descriptor) がクローズ (close) されるまでファイルは存在し続ける。
もしその名前がシンボリックリンク (symbolic link) を参照していれば、リンクは削除される。
もし名前がソケット (socket) や fifo やデバイス (device) を参照していれば名前は削除されるがそのオブジェクトをオープンしていたプロセスはそれを使い続けることができる。
返り値
成功した場合は 0 が返される。エラーの場合は-1 が返され、
errno が適切に設定される。
エラー
-
EACCES
-
pathname を含んでいるディレクトリの書き込み許可がプロセスの実効 (effective) ユーザー ID に与えられていないか、
pathname の中のディレクトリのどれかに検索許可が与えられていない (
path_resolution(7) も参照すること)。
-
EBUSY
-
システムか別のプロセスがそのファイルを使用中のため、ファイル
pathname を unlink できない。例えば、そのファイルがマウントポイントの場合や、 NFS クライアントソフトウェアがそのファイルがアクティブであるが名前なし inode (nameless inode) であることを示すために作成した場合 ("NFS silly renamed") などがある。
-
EFAULT
-
pathname がアクセス可能なアドレス空間の外を指している。
-
EIO
-
I/O エラーが発生した。
-
EISDIR
-
pathname がディレクトリを参照している。 (これは POSIX で規定されていない値で、Linux 2.1.132 以降で返される。)
-
ELOOP
-
pathname を解決する際に遭遇したシンボリックリンクが多過ぎる。
-
ENAMETOOLONG
-
pathname が長過ぎる。
-
ENOENT
-
pathname に対応するものが存在しないか、壊れたシンボリックリンクであるか、
pathname が空である。
-
ENOMEM
-
十分なカーネルメモリーがない。
-
ENOTDIR
-
pathname のディレクトリ部分が、実際には、ディレクトリでない。
-
EPERM
-
システムがディレクトリに対する unlink 操作を許可していない。またはディレクトリに対する unlink 操作のために必要な特権を呼び出し元のプロセスが持っていない。 (これは POSIX で規定されているエラーの返し方である。上述の通り、この場合には Linux は
EISDIR を返す。)
-
EPERM (Linux のみ)
-
ファイルシステムがファイルに対する unlink 操作を許していない。
-
EPERM または
EACCES
-
pathname を含んでいるディレクトリにスティッキービット (sticky-bit) (
S_ISVTX) が設定されていて、プロセスの実効ユーザー ID が削除しようとするファイルの UID でもそれを含んでいるディレクトリのものでもなく、かつプロセスに特権がない (Linux では
CAP_FOWNER ケーパビリティ (capability) がない)。
-
EROFS
-
pathname が読み込み専用のファイルシステムのファイルを参照している。
準拠
SVr4, 4.3BSD, POSIX.1-2001.
バグ
NFS プロトコルに内在する問題により、まだ使用中のファイルが想定外に消えてしまうことがありえる。
関連項目
rm(1),
chmod(2),
link(2),
mknod(2),
open(2),
rename(2),
rmdir(2),
unlinkat(2),
mkfifo(3),
remove(3),
path_resolution(7),
symlink(7)
この文書について
この man ページは Linux
man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。