---
name: "rmdir"
section: "2"
platform: "macos"
package: "xnu"
version: "12377.121.6"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/rmdir/2"
---

# rmdir(2)

remove a directory file

## NAME

**rmdir** – remove a directory file

## SYNOPSIS

**#include \<unistd.h\>**

*int*\

**rmdir**(*const char \*path*);

## DESCRIPTION

**rmdir**() removes a directory file whose name is given by *path*. The directory must not have any entries other than ‘.’ and ‘..’.

## RETURN VALUES

A 0 is returned if the remove succeeds; otherwise a -1 is returned and an error code is stored in the global location *errno*.

## ERRORS

The named file is removed unless:

- \[EACCES\]

  Search permission is denied for a component of the path prefix.

- \[EACCES\]

  Write permission is denied on the directory containing the link to be removed.

- \[EBUSY\]

  The directory to be removed is the mount point for a mounted file system.

- \[EFAULT\]

  *Path* points outside the process's allocated address space.

- \[EIO\]

  An I/O error occurs while deleting the directory entry or deallocating the inode.

- \[ELOOP\]

  Too many symbolic links are encountered in translating the pathname. This is taken to be indicative of a looping symbolic link.

- \[ENAMETOOLONG\]

  A component of a pathname (possibly expanded by a symbolic link) exceeds  {NAME\_MAX} characters, or an entire path name exceeded  {PATH\_MAX} characters.

- \[ENOENT\]

  The named directory does not exist.

- \[ENOTDIR\]

  A component of the path is not a directory.

- \[ENOTEMPTY\]

  The named directory contains files other than ‘.’ and ‘..’ in it.

- \[EPERM\]

  The directory containing the directory to be removed is marked sticky, and neither the containing directory nor the directory to be removed are owned by the effective user ID.

- \[EROFS\]

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

## SEE ALSO

[mkdir(2)](/mkdir/2.md), [unlink(2)](/unlink/2.md), [unlinkat(2)](/unlinkat/2.md)

## HISTORY

The **rmdir**() function call appeared in 4.2BSD.
