chmod、fchmod函数

来源:互联网 发布:微信淘宝优惠券群骗局 编辑:程序博客网 时间:2024/05/17 04:50

 

说明:转载请注明出处

 

 

Linux系统中,可以使用chmodfchmod函数修改文件的权限。具体见下表:

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

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击