chmod() - Unix,Linux 系统调用
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于 TP  

chmod() - Unix,Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

chmod, fchmod - 更改文件权限

概要

#include <sys/types.h>
#include <sys/stat.h> 

int chmod(const char *path, mode_t mode); int fchmod(int fildes, mode_t mode);

描述

更改由path给定或由fildes引用的文件的模式。

模式通过以下方式指定

标签描述
S_ISUID04000 设置用户 ID 以执行
S_ISGID02000 设置组 ID 以执行
S_ISVTX01000 粘滞位
S_IRUSR00400 所有者可读
S_IWUSR00200 所有者可写
S_IXUSR00100 所有者可执行/搜索
S_IRGRP00040 组可读
S_IWGRP00020 组可写
S_IXGRP00010 组可执行/搜索
S_IROTH00004 其他用户可读
S_IWOTH00002 其他用户可写
S_IXOTH00001 其他用户可执行/搜索

调用进程的有效 UID 必须与文件的拥有者匹配,或者进程必须具有特权(Linux:它必须具有CAP_FOWNER功能)。

如果调用进程没有特权(Linux:没有CAP_FSETID功能),并且文件的组与进程的有效组 ID 或其任何补充组 ID 不匹配,则 S_ISGID 位将被关闭,但这不会导致返回错误。

作为安全措施,根据文件系统,如果写入文件,则可能会关闭 set-user-ID 和 set-group-ID 执行位。(在 Linux 上,如果写入进程没有CAP_FSETID功能,则会发生这种情况。)在某些文件系统上,只有超级用户才能设置粘滞位,这可能具有特殊含义。对于粘滞位,以及目录上的 set-user-ID 和 set-group-ID 位,请参见stat(2)。

在 NFS 文件系统上,限制权限会立即影响已打开的文件,因为访问控制是在服务器上完成的,但文件由客户端维护。如果在客户端启用了属性缓存,则扩展权限可能会延迟到其他客户端。

返回值

成功时,返回零。发生错误时,返回 -1,并且errno被适当地设置。

错误

根据文件系统,可以返回其他错误。chmod() 的更常见的错误列在下面

错误代码描述
EACCES 路径前缀的组件上拒绝搜索权限。(另见path_resolution(2)。)
EFAULT path 指向您可访问的地址空间之外。
EIO 发生 I/O 错误。
ELOOP 在解析path时遇到太多符号链接。
ENAMETOOLONG path 太长。
ENOENT 文件不存在。
ENOMEM 内核可用内存不足。
ENOTDIR 路径前缀的组件不是目录。
EPERM 有效 UID 与文件的拥有者不匹配,并且进程没有特权(Linux:它没有CAP_FOWNER功能)。
EROFS 命名文件位于只读文件系统上。
fchmod() 的常见错误列在下面
EBADF 文件描述符fildes无效。
EIO 见上文。
EPERM 见上文。
EROFS 见上文。

符合标准

4.4BSD、SVr4、POSIX.1-2001。

参见



previous next Printer Friendly

广告


  

广告



广告