rmdir 子例程

用途

除去目录。

标准 C 库 (libc.a)

语法

#include <unistd.h>
int rmdir ( Path)
const char *Path;

描述

Rmdir 子例程除去由 路径 参数指定的目录。 如果系统上安装了网络文件系统 (NFS) ,那么此路径可以跨入另一个节点。

要使 Rmdir 子例程成功执行,调用进程必须具有对 路径 参数的父目录的写访问权。

此外,如果 Path 的父目录具有 粘性位属性 (在 sys/mode.h 文件中描述) ,那么调用进程必须具有下列其中一项:

  • 与要除去的目录相同的有效用户标识
  • 一个有效用户标识,等于 路径 的父目录的所有者标识
  • root 用户权限。

参数

描述
路径 指定目录路径名. 您指定的目录必须是:
该目录不包含任何其他条目。 (点)和 ..(点点)。
井形
如果是 路径 参数中的 (点) 条目存在,它必须与 路径引用同一目录。 正好一个目录具有指向 路径 参数的链接 (不包括自引用)。 (点)。 如果 ... 路径 中的 (点点) 条目已存在,它必须引用包含 路径的条目的目录。

返回值

成功完成后, Rmdir 子例程将返回值 0。 否则,返回值为-1,指定的目录不会被更改,并设置errno全局变量来指示错误。

错误代码

如果发生以下错误,那么 Rmdir 子例程将失败并且不会删除该目录:

描述
EACCES 在路径前缀的组件上没有搜索许可权,或者在要除去的目录的父目录上没有写许可权。
EBUSY 该目录正被用作安装点。
EEXISTENOTEMPTY 路径 参数指定的目录不为空。
ENAMETOOLONG 路径 参数的长度超过 PATH_MAX个; 或者路径名组件的长度超过 NAME_MAX 个且 POSIX_NO_TRUNC 个。
ENOENT 路径 参数指定的目录不存在,或者 路径 参数指向空字符串。
ENOTDIR 路径 参数指定的组件不是一个目录。
EINVAL 路径 参数指定的目录的格式不正确。
EROFS 路径 参数指定的目录驻留在只读文件系统上。

由于其他原因, Rmdir 子例程可能不成功。

如果 NFS 安装在系统上,那么如果以下情况成立,那么 rmdir 子例程将失败:

描述
ETIMEDOUT 连接已超时。