NAME
unlink,
unlinkat —
remove directory entry
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <unistd.h>
int
unlink(
const char
*path);
#include <fcntl.h>
int
unlinkat(
int
fd,
const char *path,
int flag);
DESCRIPTION
The
unlink() function removes the link named by
path from its directory and decrements the link count of
the file which was referenced by the link. If that decrement reduces the link
count of the file to zero, and no process has the file open, then all
resources associated with the file are reclaimed. If one or more process have
the file open when the last link is removed, the link is removed, but the
removal of the file is delayed until all references to it have been closed.
unlinkat() works the same way as
unlink()
except if
path is relative. In that case, it is looked
up from a directory whose file descriptor was passed as
fd. Search permission is required on this directory.
fd can be set to
AT_FDCWD
in
order to specify the current directory.
unlinkat() will remove directories just like
rmdir(2), provided
AT_REMOVEDIR
is set in
flag.
RETURN VALUES
The
unlink() and
unlinkat() functions return
the value 0 if successful; otherwise the value -1 is returned and
the global variable
errno is set to indicate the error.
ERRORS
The
unlink() and
unlinkat() functions
succeed unless:
-
-
- [
EACCES
]
- Search permission is denied for a component of the path
prefix, or write permission is denied on the directory containing the link
to be removed.
-
-
- [
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.
-
-
- [
EIO
]
- An I/O error occurred while deleting the directory entry or
deallocating the inode.
-
-
- [
ELOOP
]
- Too many symbolic links were encountered in translating the
pathname.
-
-
- [
ENAMETOOLONG
]
- A component of a pathname exceeded
{
NAME_MAX
} characters, or an entire path name
exceeded {PATH_MAX
} characters.
-
-
- [
ENOENT
]
- The named file does not exist.
-
-
- [
ENOTDIR
]
- A component of the path prefix is not a directory.
-
-
- [
EPERM
]
- The named file is a directory and the effective user ID of
the process is not the super-user, the file system containing the file
does not permit the use of unlink() on a directory, or
the directory containing the file is marked sticky, and neither the
containing directory nor the file to be removed are owned by the effective
user ID.
-
-
- [
EROFS
]
- The named file resides on a read-only file system.
In addition,
unlinkat() will fail if:
-
-
- [
EBADF
]
- path does not specify an absolute
path and fd is neither
AT_FDCWD
nor a valid file descriptor open for
reading or searching.
-
-
- [
ENOTDIR
]
- path is not an absolute path and
fd is a file descriptor associated with a
non-directory file; or flag has
AT_REMOVEDIR
set and path
does not name a directory.
-
-
- [
ENOTEMPTY
]
- flag has
AT_REMOVEDIR
set and path is
a directory that is not empty.
SEE ALSO
close(2),
link(2),
rmdir(2),
symlink(7)
STANDARDS
The
unlink() function conforms to
IEEE Std
1003.1-1990 (“POSIX.1”).
unlinkat()
conforms to
IEEE Std 1003.1-2008
(“POSIX.1”).
HISTORY
An
unlink() function call appeared in
Version 2 AT&T UNIX.