Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       rmdir - remove a directory

SYNOPSIS

       #include <unistd.h>

       int rmdir(const char *path);

DESCRIPTION

       The  rmdir()  function shall remove a directory whose name is given by path. The directory
       shall be removed only if it is an empty directory.

       If the directory is the root directory or the current working directory of any process, it
       is  unspecified  whether  the function succeeds, or whether it shall fail and set errno to
       [EBUSY].

       If path names a symbolic link, then rmdir() shall fail and set errno to [ENOTDIR].

       If the path argument refers to a path whose final component  is  either  dot  or  dot-dot,
       rmdir() shall fail.

       If  the  directory's link count becomes 0 and no process has the directory open, the space
       occupied by the directory shall be freed and the directory shall no longer be  accessible.
       If  one  or  more processes have the directory open when the last link is removed, the dot
       and dot-dot entries, if present, shall be  removed  before  rmdir()  returns  and  no  new
       entries  may be created in the directory, but the directory shall not be removed until all
       references to the directory are closed.

       If the directory is not an empty directory, rmdir() shall fail and set errno  to  [EEXIST]
       or [ENOTEMPTY].

       Upon  successful  completion,  the rmdir() function shall mark for update the st_ctime and
       st_mtime fields of the parent directory.

RETURN VALUE

       Upon successful completion, the function rmdir() shall return 0. Otherwise,  -1  shall  be
       returned,  and  errno  set  to  indicate the error. If -1 is returned, the named directory
       shall not be changed.

ERRORS

       The rmdir() function shall fail if:

       EACCES Search permission is denied on a component of the path prefix, or write  permission
              is denied on the parent directory of the directory to be removed.

       EBUSY  The  directory  to be removed is currently in use by the system or some process and
              the implementation considers this to be an error.

       EEXIST or ENOTEMPTY
              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.

       EINVAL The path argument contains a last component that is dot.

       EIO    A physical I/O error has occurred.

       ELOOP  A loop exists in symbolic links encountered during resolution of the path argument.

       ENAMETOOLONG
              The  length  of  the  path  argument  exceeds {PATH_MAX} or a pathname component is
              longer than {NAME_MAX}.

       ENOENT A component of path does not name an existing file, or the path  argument  names  a
              nonexistent directory or points to an empty string.

       ENOTDIR
              A component of path is not a directory.

       EPERM or EACCES

              The  S_ISVTX flag is set on the parent directory of the directory to be removed and
              the caller is not the owner of the directory to be removed, nor is the  caller  the
              owner of the parent directory, nor does the caller have the appropriate privileges.

       EROFS  The directory entry to be removed resides on a read-only file system.

       The rmdir() function may fail if:

       ELOOP  More  than  {SYMLOOP_MAX}  symbolic links were encountered during resolution of the
              path argument.

       ENAMETOOLONG
              As a result of encountering a symbolic link in resolution of the path argument, the
              length of the substituted pathname string exceeded {PATH_MAX}.

       The following sections are informative.

EXAMPLES

   Removing a Directory
       The following example shows how to remove a directory named /home/cnd/mod1.

              #include <unistd.h>

              int status;
              ...
              status = rmdir("/home/cnd/mod1");

APPLICATION USAGE

       None.

RATIONALE

       The  rmdir()  and  rename() functions originated in 4.2 BSD, and they used [ENOTEMPTY] for
       the condition when the directory to be removed does not exist or new already exists.  When
       the  1984  /usr/group  standard  was published, it contained [EEXIST] instead.  When these
       functions were adopted into  System  V,  the  1984  /usr/group  standard  was  used  as  a
       reference.  Therefore,  several existing applications and implementations support/use both
       forms, and no agreement could be reached on either value. All implementations are required
       to  supply  both  [EEXIST]  and  [ENOTEMPTY]  in  <errno.h>  with distinct values, so that
       applications can use both values in C-language case statements.

       The meaning of deleting pathname /dot is unclear, because the name of the file (directory)
       in  the  parent  directory  to  be  removed  is not clear, particularly in the presence of
       multiple links to a directory.

       The POSIX.1-1990 standard was silent with regard to the behavior of rmdir() when there are
       multiple  hard  links  to  the  directory  being  removed. The requirement to set errno to
       [EEXIST] or [ENOTEMPTY] clarifies the behavior in this case.

       If the process' current working directory is being removed,  that  should  be  an  allowed
       error.

       Virtually all existing implementations detect [ENOTEMPTY] or the case of dot-dot. The text
       in Error Numbers about returning any one of the possible errors permits that  behavior  to
       continue.  The [ELOOP] error may be returned if more than {SYMLOOP_MAX} symbolic links are
       encountered during resolution of the path argument.

FUTURE DIRECTIONS

       None.

SEE ALSO

       Error Numbers  ,  mkdir()  ,  remove()  ,  unlink()  ,  the  Base  Definitions  volume  of
       IEEE Std 1003.1-2001, <unistd.h>

COPYRIGHT

       Portions  of  this  text  are  reprinted  and  reproduced in electronic form from IEEE Std
       1003.1, 2003 Edition, Standard for Information Technology  --  Portable  Operating  System
       Interface  (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003 by
       the Institute of Electrical and Electronics Engineers, Inc and  The  Open  Group.  In  the
       event  of  any  discrepancy  between this version and the original IEEE and The Open Group
       Standard, the original IEEE and The Open Group  Standard  is  the  referee  document.  The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .