NAME
unlink — remove directory entry; delete file
SYNOPSIS
#include <unistd.h>
int unlink(const char *path);
DESCRIPTION
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.
RETURN VALUE
unlink()
returns the following values:
- 0
Successful completion.
- -1
Failure.
errno
is set to indicate the error.
ERRORS
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 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 exist).
- ENOTDIR
A component of the path prefix is not a directory.
- 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 appropriate privileges. Some file systems return
this error whenever the named file is a directory, regardless of the
user ID.
- 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 being executed.
WARNINGS
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)).
STANDARDS CONFORMANCE
unlink(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1