chmod函数中的mode_t参数

转载 2012年03月26日 11:58:53
chmod函数的定义: 
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *path, mode_t mode)

关于mode_t的定义:
#ifndef __mode_t_defined
typedef __mode_t mode_t;
# define __mode_t_defined
#endif


__mode_t的定义:

#define __mode_t __MODE_T_TYPE
#define __MODE_T_TYPE __U32_TYPE
#define __U32_TYPE unsigned int


可以看到mode_t的定义实际就是unsigned int形式的。

   但是函数chmod(const char *path, mode_t mode)在解释mode_t时是将这里的mode当成8进制的去解释。

参数 mode 有下列数种组合
S_ISUID 04000 文件的(set user-id on execution)位
S_ISGID 02000 文件的(set group-id on execution)位
S_ISVTX 01000 文件的sticky位
S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限
S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限 
S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限
S_IRGRP 00040 用户组具可读取权限
S_IWGRP 00020 用户组具可写入权限
S_IXGRP 00010 用户组具可执行权限
S_IROTH 00004 其他用户具可读取权限
S_IWOTH 00002 其他用户具可写入权限
S_IXOTH 00001 其他用户具可执行权限

比如要将文件test的权限修改为644,那么可以采用以下几种方法:
chmod("test", S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
chmod("test", 0644);
chmod("test", 420);

   第一种方法是将00400和00200和00040和00004进行或运算,最终得到的结果就是0644(八进制),而八进制的0644就等于十进制的420。所以上面三种方法是等效的。
   当我们给chmod函数传递参数时他会将对应的十进制的mode参数转换为相应的八进制进行运算。所以我们要将test文件的权限改为644时传递给函数chmod的参数不能直接是644。而应该是420。这是因为十进制的420就等于八进制的644。

   但是我们使用chmod命令时却可以直接输入644。具体的chmod实现时我认为是将644接收后(接收时可能是以字符串形式接收)认为644是八进制的数据,然后将644转换为对应的十进制,然后直接传递给函数chmod(const char *path, mode_t mode)。

原文请参考:http://blog.chinaunix.net/space.php?uid=20753645&do=blog&id=1877868

相关文章推荐

C语言的chmod函数

C语言的chmod函数

在Linux中, 用C语言简单实现chmod命令

在Linux中,我们知道chmod这个命令的功能是改变文件的权限。 现在, 用C语言实现这个改变文件权限的功能 要用C语言实现这个功能的核心就是 利用chmod()这个函数及对需要改变的权限的分析 ...

chmod函数中的mode_t参数

chmod函数的定义: #include #include int chmod(const char *path, mode_t mode) 关于mode_t的定义: #ifndef ...
  • sunrock
  • sunrock
  • 2011年03月21日 22:32
  • 6740

Linux 文件权限chmod命令

概述Android开发的过程中,经常需要从手机中导出文件(非存储卡中的,比如/data/data/包名/databases/下的数据库文件,手机需要root),会出现permission denied...
  • wlwh90
  • wlwh90
  • 2016年11月12日 15:31
  • 2222

linux open函数的 mode_t涵义(转)

原文地址::http://www.cnblogs.com/infiniti/archive/2013/03/06/2946998.html 打开文件、新建文件和关闭文件操作 ...

Python标准库:内置函数open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=T

本函数是打开一个文件并返回文件对象。如果文件不能打开,抛出异常OSError。参数file是一个字符串表示的文件名称,或者一个数组表示的文件名称。文件名称可以是相对当前目录的路径,也可以是绝对路径表示...
  • caimouse
  • caimouse
  • 2015年02月01日 10:10
  • 17355

linux中open()函数的mode_t 含义

 打开文件、新建文件和关闭文件操作 打开文件操作使用系统调用函数open(),该函数的作用是建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作。打开文件的一般形式是...
  • sdhgood
  • sdhgood
  • 2014年09月25日 18:15
  • 1051

linux中open()函数的mode_t 含义

打开文件、新建文件和关闭文件操作 打开文件操作使用系统调用函数open(),该函数的作用是建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作。打开文件的一般形式是: ...

fopen函数mode参数详解

函数简介: 函数功能:fopen能打开磁盘内的文件,使程序能对文件进行读写。 函数原型:FILE *fopen(const char *path, const char * mode); 传入...

chmod----改变一个或多个文件的存取模式(mode)

chmod [options] mode files 只能文件属主或特权用户才能使用该功能来改变文件存取模式。mode可以是数字形式或以who opcode permission形式...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:chmod函数中的mode_t参数
举报原因:
原因补充:

(最多只允许输入30个字)