本文主要是介绍chmod、fchmod函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
说明:转载请注明出处
在Linux系统中,可以使用chmod和fchmod函数修改文件的权限。具体见下表:
chmod/fchmod函数
头文件 | <sys/types.h> <sys/stat.h> | ||
函数形式 | int chmod(const char *path, mode_t mode); int fchmod(int fildes, mode_t mode); | ||
返回值 | 成功 | 失败 | 是否设置errno |
0 | -1 | 是 |
说明:这两个函数的区别在于第一个参数不同。chmod要求给出的是文件或目录所在的位置,而fchmod主要针对的是文件,要求调用是使用相应的文件描述符。
mode可以使用如下表所示的宏定义,通过或运算组合获得不同的组合。当然也可以直接给出八进制来设定文件权限。
chmod/fchmod中使用的宏
宏定义 | 值 | 说明 |
S_ISUID | 04000 | 设置用户权限 |
S_ISGID | 02000 | 设置组用户权限 |
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 | 其他用户的执行权限和目录搜索权限 |
chmod函数出错信息:
EACCES:给出的文件所处路径没有访问权限。
EFAULT:路径指向的文件地址错误。
EIO:发生I/O错误。
ELOOP:给出的文件所在路径中符号链接过多。
ENAMETOOLONG:路径过长。
ENOENT:文件不存在。
ENOMEM:内核内存空间不足。
ENOTDIR:给出的文件所处路径中包含不是目录的部分。
EPERM:有效用户ID与文件拥有者不同,进程无权访问修改文件权限。
EROFS:文件位于只读文件系统。
Fchmod函数出错信息:
EBADF:非法的文件描述符。
EIO:发生I/O错误。
EPERM:有效用户ID与文件拥有者不同,进程无权访问、修改文件。
EROFS:文件位于只读文件系统。
实例:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
if ( argc != 2 )
{
printf("Usage: %s filename\n", argv[0]);
return (1);
}
//调用chmod函数,将文件权限修改为"r--r--r-x"形式
if (chmod(argv[1], S_IRUSR | S_IRGRP | S_IROTH | S_IXOTH) < 0)
{
perror("Cannot modify the Permission of the file");
return (1);
}
return (0);
}
运行结果:
[root@localhost test]# ll getcwd
-rwxr-xr-x 1 root root 7102 Apr 29 23:33getcwd
[root@localhost test]# ./chmod getcwd
[root@localhost test]# ll getcwd
-r--r--r-x 1 root root 7102 Apr 29 23:33getcwd
这篇关于chmod、fchmod函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!