
2.5.2 设置文件的RWX权限
2.5.2.1 基于API的权限设置
在Linux中有相关的API来修改这个权限。修改权限的语法格式如下:

其中,第1个参数是文件名,第2个参数是目标权限。执行chmod()函数可以将文件设置为目标权限。
接下来看一下chmod()函数的用法。假设这里有一个测试文件,名称为test.bin。该文件的初始权限信息如图2-10上半部分所示(-rw-r--r--)。通过代码2-5,将文件的权限设置为S_IRUSR,也就是所属用户可读。编译运行该代码后,发现文件的权限变成如图2-10下半部分所示的内容(-r--------)。
代码2-5 文件的权限修改

这种方法的缺点是将文件原始的权限都覆盖了。比如,想要为某个文件添加某一项权限,似乎并不太好实现。

图2-10 设置文件的权限
其实仍有实现的办法,就是先通过stat接口来获取文件的原始权限信息,添加期望的权限后再设置该文件的权限。这次给该文件增加执行权限,如代码2-6所示。
代码2-6 文件的权限修改

重新编译并执行该代码可以看出,这次是在原始权限的基础上增加了执行权限,而不是把原来的权限都给覆盖了,执行结果如图2-11所示。

图2-11 为文件增加执行权限
这个API只能修改文件的权限信息,无法修改文件的所属用户和组的信息。如果想要修改所属用户和组的信息,则可以使用chown()函数,该函数的语法格式如下:

如果想要设置文件的所属用户和组,只需要将用户ID和组ID传进去即可。由于比较简单,这里不再举例说明。
2.5.2.2 基于命令的权限设置
通过编程的方式可以实现文件的权限修改,但是在日常操作中非常不方便。不必着急,Linux已经为我们提供了相关的命令行工具,这些命令行工具与函数同名,如chmod和chown等。
1.chmod命令
还是以前面添加执行权限为例,可以在命令行中执行如下命令:

执行上述命令后,就可以得到与前面程序一样的结果,如图2-11所示。可以看出,通过命令行的方式对文件的权限进行修改要简单快捷得多。
由于底层是采用二进制的方式存储的,chmod命令也是支持通过数字的方式修改其权限属性的。比如,执行如下命令:

其中,777就是使所有的RWX都设置为1,即可以被任何用户和组访问。执行结果如图2-12所示。

图2-12 通过命令设置权限
2.chown命令
chown命令用于修改文件的所属用户信息。比如,将属于root的文件test.bin改为属于sunnyzhang,可以执行如下命令:

3.chgrp命令
从名字上可以看出,chgrp命令用于修改文件的所属组信息。使用方法很简单,本节不再赘述。
关于RWX-UGO的权限访问控制就先介绍到这里。其实除了RWX-UGO权限控制,还有其他类型的权限控制,如ACL权限控制。