UNLINK(2) | System Calls Manual | UNLINK(2) |
unlink
, unlinkat
— remove directory entry
Standard C Library (libc, -lc)
#include
<unistd.h>
int
unlink
(const
char *path);
int
unlinkat
(int
fd, const char
*path, int
flag);
The
unlink
()
system call 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 path
argument may not be a directory.
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
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.
The unlink
() function returns the
value 0 if successful; otherwise the value -1 is returned and
the global variable errno is set to indicate the
error.
The unlink
() succeeds unless:
ENOTDIR
]EISDIR
]ENAMETOOLONG
]ENOENT
]EACCES
]EACCES
]ELOOP
]EPERM
]EPERM
]EPERM
]EPERM
]EIO
]EROFS
]EFAULT
]ENOSPC
]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.The unlinkat
() system call follows The
Open Group Extended API Set 2 specification.
The unlink
() function appeared in
Version 1 AT&T UNIX. The
unlinkat
() system call appeared in
FreeBSD 8.0.
The unlink
() system call traditionally
allows the super-user to unlink directories which can damage the file system
integrity. This implementation no longer permits it.
December 1, 2017 | Debian |