For the complete documentation index, see llms.txt. This page is also available as Markdown.

setmode(3)

getmode — 修改模式位

名称

getmode, setmode

Lb libc

概要

#include <unistd.h>

mode_t
getmode(const void *set, mode_t mode);

void *
setmode(const char *mode_str);

描述

getmode() 函数返回 mode 文件权限位的副本,该副本由 set 所指向的值进行修改。虽然仅修改模式位,但文件模式的其他部分也可能被检查。

setmode() 函数接受一个绝对值(八进制)或符号值(如 chmod(1) 中所述)作为参数,并返回一个指向模式值的指针,该模式值将提供给 getmode()。由于某些符号值是相对于文件创建掩码的,setmode() 可能会调用 umask(2)。如果发生这种情况,文件创建掩码将在 setmode() 返回之前恢复。如果调用程序在调用 setmode() 之后更改了其文件创建掩码的值,则必须再次调用 setmode()getmode() 才能正确修改未来的文件模式。

如果传递给 setmode() 的模式无效,或无法为返回值分配内存,setmode() 返回 NULL

setmode() 返回的值通过 malloc() 获得,当程序使用完毕后,应使用 free() 将其返还给系统,通常在调用 getmode() 之后。

错误

setmode() 函数可能失败并为 malloc(3)strtol(3) 库例程指定的任何错误设置 errno。此外,setmode() 将失败并将 errno 设置为:

[EINVAL] mode 参数不表示有效的模式。

参见

chmod(1), stat(2), umask(2), malloc(3)

历史

getmode()setmode() 函数首次出现在 4.4BSD 中。

缺陷

setmode() 函数不是线程安全的。在调用 setmode() 时,其他线程中创建的文件可能以 umask 0 创建。

最后更新于

这有帮助吗?