1 UNLINK(2)                        System Calls                        UNLINK(2)
   2 
   3 
   4 
   5 NAME
   6        unlink, unlinkat - remove directory entry
   7 
   8 SYNOPSIS
   9        #include <unistd.h>
  10 
  11        int unlink(const char *path);
  12 
  13 
  14        int unlinkat(int dirfd, const char *path, int flag);
  15 
  16 
  17 DESCRIPTION
  18        The unlink() function removes a link to a file. If path names a
  19        symbolic link, unlink() removes the symbolic link named by path and
  20        does not affect any file or directory named by the contents of the
  21        symbolic link.  Otherwise, unlink() removes the link named by the
  22        pathname pointed to by path and decrements the link count of the file
  23        referenced by the link.
  24 
  25 
  26        The unlinkat() function also removes a link to a file. See fsattr(5).
  27        If the flag argument is 0, the behavior of unlinkat() is the same as
  28        unlink() except in the processing of its path argument. If path is
  29        absolute, unlinkat() behaves the same as unlink() and the dirfd
  30        argument is unused. If path is relative and dirfd has the value
  31        AT_FDCWD, defined in <fcntl.h>, unlinkat() also behaves the same   as
  32        unlink().  Otherwise, path is resolved relative to the directory
  33        referenced by the dirfd argument.
  34 
  35 
  36        If the flag argument is set to the value AT_REMOVEDIR, defined in
  37        <fcntl.h>, unlinkat() behaves the same as rmdir(2) except in the
  38        processing of the path argument as described above.
  39 
  40 
  41        When the file's link count becomes 0 and no process has the file open,
  42        the space occupied by the file will be freed and the file is no longer
  43        accessible.  If one or more processes have the file open when the last
  44        link is removed, the link is removed before unlink() or unlinkat()
  45        returns, but the removal of the file contents is postponed until all
  46        references to the file are closed.
  47 
  48 
  49        If the path argument is a directory and the filesystem supports
  50        unlink() and unlinkat() on directories the behaviour is dependent on
  51        the filesystem.
  52 
  53 
  54        If the path argument is a directory and the filesystem does not support
  55        unlink() and unlink() on directories (for example, ZFS), the call will
  56        fail with errno set to EPERM.
  57 
  58 
  59        Upon successful completion, unlink() and unlinkat() will mark for
  60        update the st_ctime and st_mtime fields of the parent directory.  If
  61        the file's link count is not 0, the st_ctime field of the file will be
  62        marked for update.
  63 
  64 RETURN VALUES
  65        Upon successful completion, 0 is returned.  Otherwise, -1 is returned,
  66        errno is set to indicate the error, and the file is not unlinked.
  67 
  68 ERRORS
  69        The unlink() and unlinkat() functions will fail if:
  70 
  71        EACCES
  72                        Search permission is denied for a component of the path
  73                        prefix, or write permission is denied on the directory
  74                        containing the link to be removed.
  75 
  76 
  77        EACCES
  78                        The parent directory has the sticky bit set and the
  79                        file is not writable by the user, the user does not own
  80                        the parent directory, the user does not own the file,
  81                        and the user is not a privileged user.
  82 
  83 
  84        EBUSY
  85                        The entry to be unlinked is the mount point for a
  86                        mounted file system.
  87 
  88 
  89        EFAULT
  90                        The path argument points to an illegal address.
  91 
  92 
  93        EILSEQ
  94                        The path argument includes non-UTF8 characters and the
  95                        file system accepts only file names where all
  96                        characters are part of the UTF-8 character codeset.
  97 
  98 
  99        EINTR
 100                        A signal was caught during the execution of the
 101                        unlink() function.
 102 
 103 
 104        ELOOP
 105                        Too many symbolic links were encountered in translating
 106                        path.
 107 
 108 
 109        ENAMETOOLONG
 110                        The length of the path argument exceeds PATH_MAX, or
 111                        the length of a path component exceeds NAME_MAX while
 112                        _POSIX_NO_TRUNC is in effect.
 113 
 114 
 115        ENOENT
 116                        The named file does not exist or is a null pathname.
 117 
 118 
 119        ENOLINK
 120                        The path argument points to a remote machine and the
 121                        link to that machine is no longer active.
 122 
 123 
 124        ENOTDIR
 125                        A component of the path prefix is not a directory or
 126                        the provided directory descriptor for unlinkat() is not
 127                        AT_FDCWD or does not reference a directory.
 128 
 129 
 130        EPERM
 131                        The named file is a directory and {PRIV_SYS_LINKDIR} is
 132                        not asserted in the effective set of the calling
 133                        process, or the filesystem implementation does not
 134                        support unlink() or unlinkat() on directories.
 135 
 136 
 137        EROFS
 138                        The directory entry to be unlinked is part of a read-
 139                        only file system.
 140 
 141 
 142 
 143        The unlink() and unlinkat() functions may fail if:
 144 
 145        ENAMETOOLONG
 146                        Pathname resolution of a symbolic link produced an
 147                        intermediate result whose length exceeds {PATH_MAX}.
 148 
 149 
 150        ETXTBSY
 151                        The entry to be unlinked is the last directory entry to
 152                        a pure procedure (shared text) file that is being
 153                        executed.
 154 
 155 
 156 USAGE
 157        Applications should use rmdir(2) to remove a directory.
 158 
 159 ATTRIBUTES
 160        See attributes(5) for descriptions of the following attributes:
 161 
 162 
 163 
 164 
 165        +--------------------+----------------------------------------------+
 166        |  ATTRIBUTE TYPE    |               ATTRIBUTE VALUE                |
 167        +--------------------+----------------------------------------------+
 168        |Interface Stability | unlink() is Standard; unlinkat() is Evolving |
 169        +--------------------+----------------------------------------------+
 170        |MT-Level            | Async-Signal-Safe                            |
 171        +--------------------+----------------------------------------------+
 172 
 173 SEE ALSO
 174        rm(1), close(2), link(2), open(2), rmdir(2), remove(3C), attributes(5),
 175        privileges(5), fsattr(5)
 176 
 177 
 178 
 179                                December 15, 2016                     UNLINK(2)