APUE(四)
来源:互联网 发布:淘宝卖中年女秋衣服了 编辑:程序博客网 时间:2024/04/20 14:06
文件和目录
简介
讲述文件系统的特征和文件的属性,以及修改这些属性的函数。同时会看到一些Unix文件系统和符号链接的细节。
stat, fstat, 和 lstat 函数
本章的学习集中在下面三个函数和它们的返回信息
#include <sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *restrict pathname, struct stat *restrict buf);
All three return: 0 if OK, 1 on error
stat返回的是给定路径名的文件的结构信息。fstst获得已打开的描述符为filedes的文件信息。lstat和stat类似,但在处理符号链接时,lstat返回的是符号链接本身的信息,而非符号链接引用的文件的信息。
描述文件信息的结构体
struct stat {
mode_t st_mode; /* 文件类型 & 模式 (权限) */
ino_t st_ino; /* i结点号 (序列号) */
dev_t st_dev; /* 设备号 (文件系统) */
dev_t st_rdev; /* 特殊文件的设备号*/
nlink_t st_nlink; /* 链接号 */
uid_t st_uid; /* 所有者的user ID */
gid_t st_gid; /* 所有者的group ID */
off_t st_size; /* 普通文件(regular file)的大小,以字节为单位 */
time_t st_atime; /* 上次访问的时间 */
time_t st_mtime; /* 上次修改的时间 */
time_t st_ctime; /* 上次文件状态改变的时间 */
blksize_t st_blksize; /* I/O块的最佳大小 (best I/O block size) */
blkcnt_t st_blocks; /* 分配的磁盘块数目 */
};
文件类型
1.普通文件
2.目录文件。任何对于某目录有读权限的进程都可以读取目录的内容,但只有内核才能直接向目录文件做写操作。
3.块特殊文件(block special file)
4.字符特殊文件(character special file)
5.FIFO,用与进程间通信的文件类型,也叫命名管道。
6.Socket,用于进程间的网络通信,但也可以用于同一台机器的进程间通信。
7.符号链接,指向其他文件的一种文件类型
定义在<sys/stat.h>中用于判断文件类型的宏
S_ISREG()、S_ISDIR()、S_ISCHR()、S_ISBLK()、S_ISFIFO()、S_ISLNK()、S_ISSOCK()
Set-User-ID 和 Set-Group-ID
与每个进程相关的用户ID和组ID有:
×real user ID 和 real group ID标识我们的真正身份,这两个域在我们登录时从口令文件获得。在一个登录会话中,它们的值通常是不变的,但有超级用户进程可以改变它们。
×effective user ID, effective group ID, 和 supplementary group IDs 用来确定我们的文件访问权限。
×当一个程序执行时,saved set-user-ID 和 saved set-group-ID 包含了effective user ID 和 the effective group ID的拷贝。
当我们执行一个程序文件时,进程的effective user ID 通常等于 real user ID, effective group ID 通常等于 real group ID。在文件的模式字st_mode中有两个位set-user-ID bit 和 set-group-ID,当它们被置位时,进程的effective user ID设置为文件的所有者(st_uid),进程的effective group ID被设置成文件的组所有者(st_gid)。比如,某文件的所有者是超级用户,并且它的set-user-ID被置位,那么此文件作为一个进程运行时,该进程就具有了超级用户权限,而不管它的real user ID是什么。因此为防止其他用户通过该程序对所有者其他文件的滥用,文件所有者对于这种程序的能力应该进行限制。
设置一个文件的set-user-ID,输入chmod u+s filename,但要确保该文件设置了group-other执行权限。
文件访问权限
每个文件都有9个权限,<sys/stat.h>定义的访问权限位
S_IRUSR user-read
S_IWUSR user-write
S_IXUSR user-execute
S_IRGRP group-read
S_IWGRP group-write
S_IXGRP group-execute
S_IROTH other-read
S_IWOTH other-write
S_IXOTH other-execute
如果通过名字打开某个文件,那么对于在该名字(路径)中出现的目录,包括隐藏着的当前目录,我们都要有执行权限,因此目录的执行权限位也叫做搜索位(search bit)。
对一个目录的写权限和执行权限是不同的概念:前者可以使我们读取目录,获得目录中文件名的列表;当目录名是我们试图访问的路径名的一个组成部分时,后者使我们可以通过该目录(pass through the directory)。
如果在open函数中,指定了选项O_TRUNC,那么我们必须有对文件的写操作权限。
如果要在某个目录中创建一个新文件,我们必须要有在该目录的写权限和执行权限。
如果删除一个已存在的文件,我们需要其所在目录的写权限和执行权限,而不必需要该文件本身的读、写权限。
当用6个exec函数执行某个文件时,它的执行权限是必须的。
当进程要打开、创建或删除一个文件时,内核都要作访问测试。
1.如果进程的effective user ID是0(即超级用户),访问被允许。这就使得超级用户可以自由驾驭整个文件系统。
2.如果进程的effective user ID等于文件的所有者ID,而且适当的用户访问权限被置位,那么访问被允许。
3.如果进程的effective group ID,或者其中一个补充组ID(the supplementary group IDs )等于文件的组ID,而且相应的组访问权限被置位,那么访问被允许。否则,拒绝。
4.如果其它访问权限被正确置位,访问允许,否则拒绝。
以上四条自上而下,如进程是文件的所有者(满足上面第2条),访问允许或拒绝就看用户访问权限,无需再看组权限。
新文件和新目录的所有权
新文件的用户ID设置为进程的effective user ID,在POSIX.1,新文件的组ID可能是1)进程的effective group ID 2)文件所在目录的组ID
...
简介
讲述文件系统的特征和文件的属性,以及修改这些属性的函数。同时会看到一些Unix文件系统和符号链接的细节。
stat, fstat, 和 lstat 函数
本章的学习集中在下面三个函数和它们的返回信息
#include <sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *restrict pathname, struct stat *restrict buf);
All three return: 0 if OK, 1 on error
stat返回的是给定路径名的文件的结构信息。fstst获得已打开的描述符为filedes的文件信息。lstat和stat类似,但在处理符号链接时,lstat返回的是符号链接本身的信息,而非符号链接引用的文件的信息。
描述文件信息的结构体
struct stat {
mode_t st_mode; /* 文件类型 & 模式 (权限) */
ino_t st_ino; /* i结点号 (序列号) */
dev_t st_dev; /* 设备号 (文件系统) */
dev_t st_rdev; /* 特殊文件的设备号*/
nlink_t st_nlink; /* 链接号 */
uid_t st_uid; /* 所有者的user ID */
gid_t st_gid; /* 所有者的group ID */
off_t st_size; /* 普通文件(regular file)的大小,以字节为单位 */
time_t st_atime; /* 上次访问的时间 */
time_t st_mtime; /* 上次修改的时间 */
time_t st_ctime; /* 上次文件状态改变的时间 */
blksize_t st_blksize; /* I/O块的最佳大小 (best I/O block size) */
blkcnt_t st_blocks; /* 分配的磁盘块数目 */
};
文件类型
1.普通文件
2.目录文件。任何对于某目录有读权限的进程都可以读取目录的内容,但只有内核才能直接向目录文件做写操作。
3.块特殊文件(block special file)
4.字符特殊文件(character special file)
5.FIFO,用与进程间通信的文件类型,也叫命名管道。
6.Socket,用于进程间的网络通信,但也可以用于同一台机器的进程间通信。
7.符号链接,指向其他文件的一种文件类型
定义在<sys/stat.h>中用于判断文件类型的宏
S_ISREG()、S_ISDIR()、S_ISCHR()、S_ISBLK()、S_ISFIFO()、S_ISLNK()、S_ISSOCK()
Set-User-ID 和 Set-Group-ID
与每个进程相关的用户ID和组ID有:
×real user ID 和 real group ID标识我们的真正身份,这两个域在我们登录时从口令文件获得。在一个登录会话中,它们的值通常是不变的,但有超级用户进程可以改变它们。
×effective user ID, effective group ID, 和 supplementary group IDs 用来确定我们的文件访问权限。
×当一个程序执行时,saved set-user-ID 和 saved set-group-ID 包含了effective user ID 和 the effective group ID的拷贝。
当我们执行一个程序文件时,进程的effective user ID 通常等于 real user ID, effective group ID 通常等于 real group ID。在文件的模式字st_mode中有两个位set-user-ID bit 和 set-group-ID,当它们被置位时,进程的effective user ID设置为文件的所有者(st_uid),进程的effective group ID被设置成文件的组所有者(st_gid)。比如,某文件的所有者是超级用户,并且它的set-user-ID被置位,那么此文件作为一个进程运行时,该进程就具有了超级用户权限,而不管它的real user ID是什么。因此为防止其他用户通过该程序对所有者其他文件的滥用,文件所有者对于这种程序的能力应该进行限制。
设置一个文件的set-user-ID,输入chmod u+s filename,但要确保该文件设置了group-other执行权限。
文件访问权限
每个文件都有9个权限,<sys/stat.h>定义的访问权限位
S_IRUSR user-read
S_IWUSR user-write
S_IXUSR user-execute
S_IRGRP group-read
S_IWGRP group-write
S_IXGRP group-execute
S_IROTH other-read
S_IWOTH other-write
S_IXOTH other-execute
如果通过名字打开某个文件,那么对于在该名字(路径)中出现的目录,包括隐藏着的当前目录,我们都要有执行权限,因此目录的执行权限位也叫做搜索位(search bit)。
对一个目录的写权限和执行权限是不同的概念:前者可以使我们读取目录,获得目录中文件名的列表;当目录名是我们试图访问的路径名的一个组成部分时,后者使我们可以通过该目录(pass through the directory)。
如果在open函数中,指定了选项O_TRUNC,那么我们必须有对文件的写操作权限。
如果要在某个目录中创建一个新文件,我们必须要有在该目录的写权限和执行权限。
如果删除一个已存在的文件,我们需要其所在目录的写权限和执行权限,而不必需要该文件本身的读、写权限。
当用6个exec函数执行某个文件时,它的执行权限是必须的。
当进程要打开、创建或删除一个文件时,内核都要作访问测试。
1.如果进程的effective user ID是0(即超级用户),访问被允许。这就使得超级用户可以自由驾驭整个文件系统。
2.如果进程的effective user ID等于文件的所有者ID,而且适当的用户访问权限被置位,那么访问被允许。
3.如果进程的effective group ID,或者其中一个补充组ID(the supplementary group IDs )等于文件的组ID,而且相应的组访问权限被置位,那么访问被允许。否则,拒绝。
4.如果其它访问权限被正确置位,访问允许,否则拒绝。
以上四条自上而下,如进程是文件的所有者(满足上面第2条),访问允许或拒绝就看用户访问权限,无需再看组权限。
新文件和新目录的所有权
新文件的用户ID设置为进程的effective user ID,在POSIX.1,新文件的组ID可能是1)进程的effective group ID 2)文件所在目录的组ID
...
- APUE(四)
- APUE学习(四):信号
- APUE笔记四
- APUE之线程(四)
- APUE 学习(四) 守护进程
- apue读书笔记【四】:系统的限制
- apue
- APUE
- apue
- APUE
- APUE
- APUE函数笔记四: 系统数据文件和信息
- APUE读书笔记之四——文件和目录
- APUE[ "apue.h" ]
- haha ,APUE
- APUE(二)
- APUE(三)
- APUE读书笔记
- VC++学习
- 实现高效的数据库连接池(附带完整代码C#和Java实现)
- Web打印
- DLL中如何获得调用该DLL的进程ID和提权代码
- 忏悔,懊恼,无赖,还是。。。。。。
- APUE(四)
- 怎么去掉telnet的ntml验证
- fckeditor2.31.net源代码自定义
- 获取Excel中表的集合信息(framework2.0、1.1、1.0)
- 软键盘
- 如何变得更轻松:项目管理技法
- 门户系统建设的四个误区及成功六要素研究
- Install RDA
- ubuntu右键在当前目录执行终端terminal程序