UNLINK(2) | System Calls Manual | UNLINK(2) |
unlink
, unlinkat
— remove directory entry
#include
<unistd.h>
int
unlink
(const char *path);
int
unlinkat
(int
fd, const char
*path, int
flag);
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.
The
unlinkat
()
system call is equivalent to unlink
() or
rmdir
()
except in the case where path specifies a relative
path. In this case the directory entry to be removed is determined relative
to the directory associated with the file descriptor
fd instead of the current working directory.
The values for flag are constructed by a
bitwise-inclusive OR of flags from the following list, defined in
<fcntl.h>
:
AT_REMOVEDIR
AT_SYMLINK_NOFOLLOW_ANY
If
unlinkat
()
is passed the special value AT_FDCWD
in the
fd parameter, the current working directory is used
and the behavior is identical to a call to unlink or
rmdir respectively, depending on whether or not the
AT_REMOVEDIR
bit is set in flag.
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned and errno is set to indicate the error.
The unlink
() system call will fail if:
EACCES
]EACCES
]EBUSY
]EBUSY
]EFAULT
]EIO
]ELOOP
]ENAMETOOLONG
]{NAME_MAX}
characters, or an entire path name exceeds
{PATH_MAX}
characters (possibly as a result of
expanding a symlink).ENOENT
]ENOTDIR
]EPERM
]EPERM
]EROFS
]In addition to the errors returned by the
unlink
(), the unlinkat
() may
fail if:
EBADF
]AT_FDCWD
nor a valid file descriptor open for
searching.ENOTEMPTY
]AT_REMOVEDIR
bit set and the
path argument names a directory that is not an empty
directory, or there are hard links to the directory other than dot or a
single entry in dot-dot.ENOTDIR
]AT_REMOVEDIR
bit set and
path does not name a directory.EINVAL
]ENOTDIR
]AT_FDCWD
nor a
file descriptor associated with a directory.ELOOP
]AT_SYMLINK_NOFOLLOW_ANY
bit set and one of the
intermediate directories in the path argument is a
symbolic link.The unlinkat
() system call is expected to
conform to POSIX.1-2008 .
An unlink
() function call appeared in
Version 6 AT&T UNIX. The
unlinkat
() system call appeared in OS X 10.10
June 4, 1993 | BSD 4 |