第四章写的真的好(先吹一波)
内容概括:
这一章主要讲解了stat里面的各个字段,以此讲解unix的文件系统和一些和文件目录有关的API
讲解细致,stat函数可以获取一个文件的状态信息,包括:
1 文件类型和文件模式字和对文件的访问权限
2 i节点编号
3 设备号
4 特殊文件的设备号
5 链接数量
6 uid
7 gid
8 文件长度
9 访问时间
10 修改时间
11 状态改变时间
12 字节块的大小
13 字节块数
主要内容:
文件类型:
1 普通文件
2 目录文件(只有内核才能直接写文件)
3 块特殊文件 提供对设备带缓冲的访问
4 字符特殊文件 提供不带缓冲的访问
5 FIFO 命名管道
6 套接字 SOCKET
7 符号链接
提供了一些宏访问
以及一些IPC对象,消息队列,信号量,共享储存对象
ID:
一个进程相关联的ID往往有6个或更多
实际用户ID:
实际组ID:
我们实际上是谁
有效用户ID
有效祖ID
附属组ID
用于权限检查
保存的设置用户ID
保存的设置祖ID
当有效ID被替换时,这两个字段保存有效iD
在st_mode字段中,有三个特殊的位,分别为设置用户ID位,设置组ID位,黏着位
当设置用户ID位,设置组ID位,被设置时,当一个进程访问该文件时,相应有效ID被设置位文件所有者ID位
文件访问权限:
在st_mode字段中
u:rwx
g:rwx
o: rwx
访问目录去打开文件时,需要对目录有执行权限,所以也被成为搜索位
在目录中创建一个新文件,必须对该目录有写权限和执行权限
删除文件时,同上
对一个文件进行操作时,内核根据有效用户id->有效组ID->其他用户的顺寻检查
新文件和目录的所有权(注意是ID,而不是文件权限):
新文件的用户ID设置为进程的有效用户ID
组ID:
可以是进程的有效组ID
可以是目录的组ID
目录规则相同
黏着位:
在以前的UNIX系统中,如果文件设置了这一位,那么在程序终止时,程序正文部分的一个副本被保存在交换区中,时的下次执行时能较快的载入内存
现在的已经不需要这种技术了
有了新的功能:
如果目录设置了该位:
只有对该目录有写权限的并且满足(拥有此文件,拥有此目录,超级用户条件之一)才能删除和重命名文件
文件系统:
书上的是UFS文件系统
每一个分区是一个文件系统
目录项指向Inode,inode指向数据块或者目录项
每一个inode有一个链接计数,链接计数为0才删除,这里是硬链接
inode中包含了文件有关的信息
目录项中有文件名,i节点编号
数据项是文件真正的数据
符号链接:
与硬链接的区别:
硬链接指向i节点,且只能在同一文件系统,只有超级用于才能指向目录的硬链接
在使用文件的API时应该注意是否跟随符号链接
在出现循环时,如果时硬链接就比较难消除
但是因为unlink不跟随符号链接,所以比较容易消除这种循环
API
access faccesssat
用实际用户ID访问
umask 设置文件模式创建屏蔽字(访问权限)
chmod 三兄弟 改变访问权限
chown四兄弟改变文件所有者
unlink解除一个链接