上一节介绍了文件I/O操作,主要是文件的打开和文件的read和write。本节将介绍文件系统的其它属性和文件的性质。
1、stat、fstat和lstat函数
stat函数返回一个于此命名文件有关的信息结构,fstat返回已在文件描述符fields上打开的文件的有关信息。lstat类似于stat,但当命名的文件是一个符号连接时,返回符号链接的相关信息。
三个函数的返回:若成功则为0,若出错则为-1。
2、文件类型
(1)普通文件
(2)目录文件
(3)字符特殊文件
(4)块特殊文件,这种文件典型用于磁盘设备。系统中的所有文件或者是字符特殊文件,或者是块特殊文件。
(5)FIFO,用于进程间通信,有时称其为命名管道。
(6)套接口(socket),用于进程间的网络通信,也可用于在一台主机上的进程间的通信。
(7)符号连接,这种文件指向另一种文件。
3、设置-用户-ID和设置-组-ID
与一个进程相关联的ID有六个或更多。
注意:文件的实际用户ID;有效用ID;另外每一个文件都有一个所有者和组所有者。
4、文件存取许可权
每个文件有9个存取许可权位,可以分为3类读、写和执行。chmod命令用于修改这9个许可权位。
进程每次打开、创建和删除某个文件时,内核都进行文件存取许可权测试。有四步。
当用open或create创建新文件时,新文件的用户ID和组ID的值是什么呢?(用户ID就是进程的有效用户ID,组ID,可以是进程的有效组ID或它所在目录的组ID)
5、access函数
前面当用open函数创建一个文件时,内核是以文件的有效用户ID和有效组ID为基础进行存取权限检测的。这里access函数是按实际用户ID和实际组ID进行存取许可检测的。
6、umask函数、chmod和fchmod函数
umask函数是用来设置文件方式创建屏蔽字的。
chmod和fchmod可以更改现存文件的存取许可权。注意为了改变文件的许可权位,进程的有效用户ID,必须等于文件的所有者。或者进程具有超级用户许可权。
chown,fchown和lchown可以更改文件的用户ID和组ID。
stat结构的st_size成员包含了以字节为单位的该文件的长度。
有时我们需要在文件的尾端除截去一些数据以缩短文件,将一个文件长度截短为0是一个特例,用O_TRUNC标志可以做到这一点,为了截短文件我们可以调用函数truncate和ftruncate函数。
7、文件系统
我们可以把一个磁盘分成多个分区,每个分区包含一个文件系统。四块:
i节点是固定长度的记录项,存有文件的相关信息。
文件连接的概念:指的是指向一个文件i节点的目录项与该文件i节点之间的连接。
可以有多个目录指向同一节点。
连接计数的概念。
8、link,unlink,remove和rename函数
创建一个指向现存文件连接的方法是使用link函数。即创建一个新的目录项。
删除现存的目录项,可以调用unlink函数。
也可用remove函数解除对一个文件或目录的连接。
更改文件或目录的名字用rename函数。
9、符号连接
符号连接是一个对文件的间接指针,和硬连接有所不同,硬连接直接指向文件的i节点。
10、utime函数
一个文件的存取和修改时间可以用utime函数更改。
11、mkdir和rmdir函数
用mkdir函数创建目录,用rmdir函数删除目录。
12、chdir,fchdir和getcwd函数
进程调用chdir或fchdir函数可以更改当前工作目录。pwd命令可获取当前工作目录。
getcwd函数可以获取当前工作目录的绝对路径名。
附:1、struct ifreq在usr/include/net/if.h文件中,是保存接口信息的结构体。