> For the complete documentation index, see [llms.txt](https://man.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://man.bsdcn.org/posix1e/acl_add_perm.3.md).

# acl\_add\_perm(3)

`acl_add_perm` — 向权限集中添加权限

## 名称

`acl_add_perm`

## 库

libc

## 概要

`#include <sys/types.h>`

`#include <sys/acl.h>`

```c
int
acl_add_perm(acl_permset_t permset_d, acl_perm_t perm);
```

## 描述

`acl_add_perm` 函数是一个 POSIX.1e 调用，用于将 `perm` 中包含的权限添加到权限集 `permset_d` 中。

注意：尝试添加权限集中存在的权限不视为错误。

对于 POSIX.1e ACL，有效值为：

| ACL\_EXECUTE | 执行权限 |
| ------------ | ---- |
| ACL\_WRITE   | 写入权限 |
| ACL\_READ    | 读取权限 |

对于 NFSv4 ACL，有效值为：

| ACL\_READ\_DATA          | 读取权限                |
| ------------------------ | ------------------- |
| ACL\_LIST\_DIRECTORY     | 同 ACL\_READ\_DATA   |
| ACL\_WRITE\_DATA         | 写入权限，或创建文件的权限       |
| ACL\_ADD\_FILE           | 同 ACL\_READ\_DATA   |
| ACL\_APPEND\_DATA        | 创建目录的权限。对文件忽略       |
| ACL\_ADD\_SUBDIRECTORY   | 同 ACL\_APPEND\_DATA |
| ACL\_READ\_NAMED\_ATTRS  | 忽略                  |
| ACL\_WRITE\_NAMED\_ATTRS | 忽略                  |
| ACL\_EXECUTE             | 执行权限                |
| ACL\_DELETE\_CHILD       | 删除文件和子目录的权限         |
| ACL\_READ\_ATTRIBUTES    | 读取基本属性的权限           |
| ACL\_WRITE\_ATTRIBUTES   | 修改基本属性的权限           |
| ACL\_DELETE              | 删除该 ACL 所附加对象的权限    |
| ACL\_READ\_ACL           | 读取 ACL 的权限          |
| ACL\_WRITE\_ACL          | 修改 ACL 和文件模式的权限     |
| ACL\_SYNCHRONIZE         | 忽略                  |

使用 `perm` 等于 ACL\_WRITE 或 ACL\_READ 调用 `acl_add_perm` 会将 ACL 标记为 POSIX。使用 ACL\_READ\_DATA、ACL\_LIST\_DIRECTORY、ACL\_WRITE\_DATA、ACL\_ADD\_FILE、ACL\_APPEND\_DATA、ACL\_ADD\_SUBDIRECTORY、ACL\_READ\_NAMED\_ATTRS、ACL\_WRITE\_NAMED\_ATTRS、ACL\_DELETE\_CHILD、ACL\_READ\_ATTRIBUTES、ACL\_WRITE\_ATTRIBUTES、ACL\_DELETE、ACL\_READ\_ACL、ACL\_WRITE\_ACL 或 ACL\_SYNCHRONIZE 调用该函数会将 ACL 标记为 NFSv4。

## 返回值

`acl_add_perm` 函数成功时返回 0；否则返回 -1，并设置全局变量 `errno` 以指示错误。

## 错误

`acl_add_perm` 函数在以下情况失败：

`[EINVAL]` 参数 `permset_d` 不是 ACL 条目内权限集的有效描述符。参数 `perm` 不包含有效的 `acl_perm_t` 值。ACL 已标记为其他类型。

## 参见

[acl(3)](/posix1e/acl.3.md), [acl\_clear\_perms(3)](/posix1e/acl_clear_perms.3.md), [acl\_delete\_perm(3)](/posix1e/acl_delete_perm.3.md), [acl\_get\_brand\_np(3)](/posix1e/acl_get_brand_np.3.md), [acl\_get\_permset(3)](/posix1e/acl_get_permset.3.md), [acl\_set\_permset(3)](/posix1e/acl_set_permset.3.md), [posix1e(3)](/posix1e/posix1e.3.md)

## 标准

POSIX.1e 在 IEEE POSIX.1e 草案 17 中描述。

## 历史

POSIX.1e 支持引入于 FreeBSD 4.0。`acl_add_perm` 函数添加于 FreeBSD 5.0。

## 作者

`acl_add_perm` 函数由 Chris D. Faulhaber <jedgar@fxp.org> 编写。
