1.函数相关的关系
int fstatat(int fd,const char *restrict pathname,struct stat *restrict buf,int flag)
在这里共性的一些东西
1)关于fd与pathname,当pathname是绝对路径的时候忽略fd
2)当fd是AT_FDCWD的时候,表明是基于当前工作目录下的pathname
3)当fd是其他的打开目录的时候,则相对于其他的目录
4)flag是控制是否跟随符号连接的
2.stat结构体
本章的函数基本上是围绕这个结构体来展开的,说明了文件的各种属性
1:st_mode里面包含有
文件的类型:FIFO,普通文件,目录文件,块文件,字符文件
设置用户ID和设置组ID:如果设置了,择可以让进程的有效用户和有效用户组变成文件的用户和用户组
与进程相关的ID有六个,分别是实际用户ID,实际组ID
有效用户ID,有效组ID 附属组ID
保存的设置用户ID,保存的设置组ID
其中进程的ID和文件的所属者和所属组ID,虽然都是一个数字对应这root或者别的用户(用户组),但是进程的实际ID确实来自登陆用户所确定的,更改一个程序文件的所属用户并不能改变执行此程序时的实际用户ID,实际用户ID只与登陆时的有关
文件的访问权限:用户读写执行,用户组读写执行,其他读写执行(列如,对一个文件的写权限决定了是否能够打开文件进行写操作,是先有了写权限,采取测试能不能以写方式去打开文件,读,执行是类似的)
粘着位:当对目录设置了粘着位的时候,对目录底下的文件删除必须如下:拥有此文件,拥有此目录,是超级用户
相关函数
1.1umask相关
当umask设置了哪几位的时候,在创建文件时候,即指定了文件的mode的时候,就相应的屏蔽掉哪几位
列如umask(S_IRGRP)
creat("bar",RWRWRW);
就屏蔽掉组读
新文件和目录的所有权
新文件的用户ID被设置成进程的有效ID,组ID?
对于linux,如果文件所在目录的设置组ID位被设置,则新文件的组ID设置位目录的组ID,否则为进程的组ID
1.2关于chmod的一个函数
int fchmodat(int fd,const char *pathname,mode_t mode,int flag);
1)关于fd与pathname,当pathname是绝对路径的时候忽略fd
2)当fd是AT_FDCWD的时候,表明是基于当前工作目录下的pathname
3)当fd是其他的打开目录的时候,则相对于其他的目录
4)flag是控制是否跟随符号连接的
注意 chmod是可以置设置用户位为1,也可以设置设置用户组为1,还可以设置粘着位
chmod改变的只是I节点的信息,而ls -l显示的是文件内容最近的改变,所以并不变化时间
2.st_uid,stgid
分别是用户和用户组,可以改变的函数是chown,fchown
在linux中,我们总是对这几个函数有限制的,只有超级用户能够更改文件用户ID
如果进程拥有次文件,并且参数own应该为-1或者用户ID时,group可以是有效组ID或者进程的附属组ID之一,并且应该清除设置用户ID和设置组ID
3.st_size
对于连接文件长度是连接名称的长度
4.st_blksize
文件I/O比较合适的块长度
5.st_blocks
所分配的实际512字节块块数
6.st_nlink
连接数目,有几个硬链接,应用的函数有unlink函数,link,unlinkat函数
其实和remove函数是一样的,删除一个文件只不过是将其连接数减1,如果减到0,则进行删除
7st_ino
此文件的i节点位置,i节点的编号,一个目录项的i节点编号不能指向其他的文件系统,因为在一个文件系统中的i节点编号是从0开始的
8st_atim文件数据的最后访问时间,st_mtim文件数据的最后修改时间,st_ctim i节点最后修改的时间