UNIX环境高级编程读书笔记(二)—目录和文件 (4)
来源:互联网 发布:无间道歌词含义 知乎 编辑:程序博客网 时间:2024/05/30 04:31
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。
- UNIX环境高级编程读书笔记(二)—目录和文件 (4)
- UNIX环境高级编程读书笔记(二)—目录和文件 (4)
- UNIX环境高级编程读书笔记(二)—目录和文件(1)
- UNIX环境高级编程读书笔记(二)—目录和文件 (2)
- UNIX环境高级编程读书笔记(二)—目录和文件 (3)
- UNIX环境高级编程读书笔记(二)—目录和文件(1)
- UNIX环境高级编程读书笔记(二)—目录和文件 (2)
- UNIX环境高级编程读书笔记(二)—目录和文件 (3)
- UNIX环境高级编程读书笔记(二)—目录和文件(1)
- UNIX环境高级编程读书笔记(二)—目录和文件 (2)
- 文件和目录(二)--unix环境高级编程读书笔记
- Unix环境高级编程——第四章 目录和文件
- UNIX环境编程--目录和文件
- 《unix环境高级编程》 读书笔记 (4)
- Unix环境高级编程读书笔记(4)
- UNIX环境高级编程读书笔记(4)
- UNIX环境高级编程-读书笔记-网络编程(二)
- linux信号(二)--unix环境高级编程读书笔记
- 闭关纪要4.优化站外脚本的性能
- 主题:hibernate的各种保存方式的区别
- UNIX环境高级编程读书笔记(二)—目录和文件 (3)
- 开源软件商业化的盈利模式
- Configure the display resolution in Linux RedHat9
- UNIX环境高级编程读书笔记(二)—目录和文件 (4)
- CASyncSocket类和CSocket类编程
- UNIX环境高级编程读书笔记(四)—出错处理
- Statement与PreparedStatement的区别
- struts1流程图
- UNIX环境高级编程读书笔记(五)—系统文件和信息 (1)
- UNIX环境高级编程读书笔记(五)—系统文件和信息 (2)
- sales force的个人开发笔记
- UNIX环境高级编程读书笔记(六)—时间和日期 (1)