13.
名称: |
umask |
目标: |
为进程文件方式创建屏蔽字 |
头文件: |
#include < sys/types.h> #include <sys/stat.h> |
函数原形: |
mode_t umask(mode_t cmask); |
参数: |
cmask |
返回值: |
以前的文件方式创建屏蔽字 |
umask函数为进程设置文件方式创建屏蔽字,并返回以前的值。其中,参数cmask由下面9个常数逐为与构成。
S_IRUSR 用户-读
S_IWUSR 用户-写
S_IXUSR 用户-执行
S_IRGRP 组-读
S_IWGRP 组-写
S_IXGRP 组-执行
S_IROTH 其他-读
S_IWOTH 其他-写
S_IXOTH 其他-执行
在进程创建一个新文件或新目录时,就一定会使用文件方式创建屏蔽字。
下面是一个例子程序2_9.c创建两个文件,创建第一个时,umask值为0,创建第二个时,umask值禁止所有组和其他存取许可权。若运行此程序可得如下结果,从中可见存取许可权是如何设置的。
/*2_9.c*/ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h>
int main(int argc,char *argv[]) { umask(0); if(creat(argv[1],S_IRUST|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)<0) perror(“ERROR”); umask(S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); if(creat(argv[2],S_IRUST|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)<0) perror(“ERROR”); exit(0); } |
下面是执行:
#gcc –o 2_9 2_9.c #./2_9 test1 test2 #ls –l test1 test2 -rw-rw-rw- 1 root root 0 sep 24 22:26 test1 -rw------- 1 root root 0 sep 24 22:26 test2 |
我们可以看到第二个文件的组成员和其他人的读写权限被屏蔽了。
14.
名称: |
chmod/fchmod |
目标: |
修改文件的所有权限和特殊属性。 |
头文件: |
#include < sys/types.h> #include <sys/stat.h> |
函数原形: |
int chmod(const char *path,mode_t mode); int fchmod(in fildes,mode_t mode); |
参数: |
path 文件名 mode 新的所有权和特殊属性。 fildes 文件描述符 |
返回值: |
-1 遇到错误 |
|
0 成功返回 |
chmod函数在指定的文件上进行操作,而fchmod函数则对已打开的文件进行操作。
为了改变一个文件的许可权位,进程的有效用户ID必须等于文件的所有者,或者该进程必须具有超级用户许可权。
程序可以通过系统调用chmod来改变文件的所有权和特殊属性,如:
chmod(“/tmp/myfie”,04764);
chmod(“/tmp/myfie”,S_ISUID|S_IRWXU|S_IRGRP|S_IWGRP|S_IROTH);
上述两条指令的作用相同,第一条是八进制来表示,第二条是用<sys/stat.h>中定义的符号来表示。后者有明显的优点,当系统定义的许可位的值改变时,无需修改程序。
Chmod函数的mode常数如下:
宏表示 八进制表示 含义
S_ISUID 04000 执行时设置用户id
S_ISGID 02000 执行时设置组id
S_ISVTX 01000 保存正文
S_IRWXU 00700 用户(所有者)读、写和执行
S_IRUSR 00400 用户(所有者)读
S_IWUSR 00200 用户(所有者)写
S_IXUSR 00100 用户(所有者)执行
S_IRWXG 00070 组读、写和执行
S_IRGRP 00040 组读
S_IWGRP 00020 组写
S_IXGRP 00010 组执行
S_IRWXO 00007 其他读、写和执行
S_IROTH 00004 其他读
S_IWOTH 00002 其他写
S_IXOTH 00001 其他执行
八、文件所有者和组
15.
名称: |
chown/fchown/lchown |
目标: |
修改文件所有者和组 |
头文件: |
#include <sys/types.h> #include < unistd.h> |
函数原形: |
int chown(const char *path,uid_t owner,gid_t group); int fchown(int fd,uid_t owner,gid_t group); int lchown(const char *path,uid_t owner,gid_t group); |
参数: |
path 文件名 fp 文件描述符 owner 新的文件所有者ID。 group 新的组ID。 |
返回值: |
-1 遇到错误 |
|
0 成功返回 |
chown通过修改文件属性来修改文件所有者和组的ID。例如:
chown(“file1“,200,40);
将文件file1的用户ID改为200,组ID改为40。
文章转自:http://blog.chinaunix.net/u1/59291/showart.php?id=538548