参考:https://blog.youkuaiyun.com/zhouzhenhe2008/article/details/40394565
https://blog.youkuaiyun.com/FadeFarAway/article/details/53967691
头函数:
#include < sys/stat.h>
函数定义:
int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);
函数说明:
chmod()会依参数mode 权限来更改参数path 指定文件的权限。
fchmod()会依参数mode 权限来更改参数fd 所指文件的权限。参数fd 为已打开文件的文件描述符。参数mode 和chmod ()函数一致。
返回值:
权限改变成功则返回0, 失败返回-1, 错误原因存于errno
参数 mode 有下列数种组合:
S_ISUID 04000 文件的 (set user-id on execution)位
S_ISGID 02000 文件的 (set group-id on execution)位
S_ISVTX 01000 文件的sticky 位
S_IRUSR 00400 文件所有者具可读取权限
S_IWUSR 00200 文件所有者具可写入权限
S_IXUSR 00100 文件所有者具可执行权限
S_IRGRP 00040 用户组具可读取权限
S_IWGRP 00020 用户组具可写入权限
S_IXGRP 00010 用户组具可执行权限
S_IROTH 00004 其他用户具可读取权限
S_IWOTH 00002 其他用户具可写入权限
S_IXOTH 00001 其他用户具可执行权限
错误代码:
EPERM 进程的有效用户识别码与欲修改权限的文件拥有者不同, 而且也不具root 权限.
EACCESS 参数path 所指定的文件无法存取.
EROFS 欲写入权限的文件存在于只读文件系统内.
EFAULT 参数path 指针超出可存取内存空间.
EINVAL 参数mode 不正确
ENAMETOOLONG 参数path 太长
ENOENT 指定的文件不存在
ENOTDIR 参数path 路径并非一目录
ENOMEM 核心内存不足
ELOOP 参数path 有过多符号连接问题.
EIO I/O 存取错误
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
void main()
{
const char path[] = "/test/chmod_test";
//chmod( path, S_IRUSR | S_IWUSR | S_IXUSR);
chmod( path, 0700) ;//效果相同 d目录-文件x执行r读w写,这里注意7之前要加0,否则出错。
}