文件大致组成如图
inode:本质是一个结构体,储存文件的属性信息。如:权限,类型,大小。。。。也叫文件属性管理结构,大多数的inode储存在磁盘上。
dentry(目录项):本质依然是结构体,其中重要的成员变量有两个{文件名,inode……},文件的内容是保存在磁盘中的。
所以一个文件描述主要就由上面两个东西组成。
stat函数:获取文件属性
int stat(const *path, struct stat *buf);
参数:
path:文件路径
buf:传出参数,存放文件属性,inode结构体指针。
返回值:
成功:0
失败:-1 errno
用宏函数来判断文件是什么(下面代码块中的参数m用的就是结构中的.st_mode成员)
S_ISREG(m) is it a regular file?
S_ISDIR(m) directory?
S_ISCHR(m) character device?
S_ISBLK(m) block device?
S_ISFIFO(m) FIFO (named pipe)?
S_ISLNK(m) symbolic link? (Not in POSIX.1-1996.)
S_ISSOCK(m) socket? (Not in POSIX.1-1996.)
lstat函数和stat函数基本一样,唯一不同的是,lstat不会穿透符号链接,stat会穿透符号链接(软连接)cat vim都会穿透符号链接
文件权限16位
前四位是文件类型 后三位特殊权限 最后九位分别是U(所有者),G(同组用户),O(其他人)的rwx
S_IFMT可以看为一个掩码,屏蔽低12位