unlink - remove directory entry; delete file
int unlink(const char *path);
The unlink() system call removes the directory entry named by the path
name pointed to by path.
When all links to a file have been removed and no process has the file
open, the space occupied by the file is freed and the file ceases to
exist. If one or more processes have the file open when the last link
is removed, only the directory entry is removed immediately so that
processes that do not already have the file open cannot access the
file. After all processes close their references to the file, if
there are no more links to the file, the space occupied by the file is
then freed and the file ceases to exist.
unlink() returns the following values:
0 Successful completion.
-1 Failure. errno is set to indicate the error.
If unlink() fails, errno is set to one of the following values:
[EACCES] Search permission is denied for a component
of the path prefix.
[EACCES] Write permission is denied on the directory
containing the link to be removed.
[EACCES] The process does not have read/write access
permission to the parent directory.
[EBUSY] The entry to be unlinked is the mount point
for a mounted file system.
[EFAULT] path points outside the process's allocated
address space. The reliable detection of
this error is implementation dependent.
[ELOOP] Too many symbolic links were encountered in
translating the path name.
[ENAMETOOLONG] The length of the specified path name exceeds
PATH_MAX bytes, or the length of a component
Hewlett-Packard Company - 1 - HP-UX Release 11i: November 2000
of the path name exceeds NAME_MAX bytes while
_POSIX_NO_TRUNC is in effect.
[ENOENT] The named file does not exist (for example,
path is null or a component of path does not
[ENOTDIR] A component of the path prefix is not a
[EPERM] The directory containing the file to be
removed has the sticky bit set and neither
the containing directory nor the file to be
removed are owned by the effective user ID.
[EPERM] The named file is a directory and the
effective user ID is not a user with
[EROFS] The directory entry to be unlinked is part of
a read-only file system.
[ETXTBSY] The entry to be unlinked is the last link to
a pure procedure (shared text) file that is
If unlink() is used on a directory that is not empty (contains files
other than . and ..), the directory is unlinked, the files become
orphans, and the directory link count is left with an inaccurate value
unless they are linked by some other directory.
If unlink() is used on a directory that is empty (contains only the
files . and ..), the directory is unlinked, but the parent
directory's link count is left with an inaccurate value.
In either of the above cases, the file system should be checked using
fsck (see fsck(1M)). To avoid these types of problems, use rmdir()
instead (see rmdir(2)).
rm(1), close(2), link(2), open(2), rmdir(2), remove(3C).
unlink(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1
Hewlett-Packard Company - 2 - HP-UX Release 11i: November 2000