> 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/string/strmode.3.md).

# strmode(3)

`strmode` — 将 inode 状态信息转换为符号字符串

## 名称

`strmode`

## 库

Lb libc

## 概要

`#include <string.h>`

`Ft void Fn strmode mode_t mode char *bp`

## 描述

`strmode` 函数将文件 `mode`（与 inode 关联的类型和权限信息，参见 stat(2)）转换为符号字符串，存储在 `bp` 所引用的位置。存储的字符串长度为 11 个字符，外加末尾的 `NUL`。

第一个字符是 inode 类型，为以下之一：

**-** 普通文件 **b** 块特殊文件 **c** 字符特殊文件 **d** 目录 **l** 符号链接 **p** fifo **s** socket **w** whiteout **?** 未知 inode 类型

接下来的九个字符编码三组权限，每组三个字符。前三个字符是文件所有者的权限，中间三个是文件所属组的权限，最后三个是 “其他”（即默认）用户的权限。

权限检查尽可能具体地执行。若第一组权限中拒绝文件所有者读取，则文件所有者将无法读取该文件。即使所有者属于文件的组且组权限允许读取，或 “其他” 权限允许读取，此规则同样适用。

若该三字符集中的第一个字符是 `r`，则对应的用户可读该文件；若为短横 `-`，则不可读。

若该三字符集中的第二个字符是 `w`，则对应的用户可写该文件；若为短横 `-`，则不可写。

第三个字符是以下适用字符中的第一个：

**S** 若该字符属于所有者权限，且文件不可执行或目录不可被所有者搜索，且设置了 set-user-id 位。

**S** 若该字符属于组权限，且文件不可执行或目录不可被组搜索，且设置了 set-group-id 位。

**T** 若该字符属于其他权限，且文件不可执行或目录不可被其他用户搜索，且设置了 “sticky”（`S_ISVTX`）位。

**s** 若该字符属于所有者权限，且文件可执行或目录可被所有者搜索，且设置了 set-user-id 位。

**s** 若该字符属于组权限，且文件可执行或目录可被组搜索，且设置了 set-group-id 位。

**t** 若该字符属于其他权限，且文件可执行或目录可被其他用户搜索，且设置了 “sticky”（`S_ISVTX`）位。

**x** 文件可执行或目录可搜索。

**-** 以上均不适用。

最后一个字符始终是空格。

## 参见

[chmod(1)](/man1/chmod.1.md), [find(1)](/man1/find.1.md), stat(2), getmode(3), setmode(3)

## 历史

`strmode` 函数首次出现于 4.4BSD。
