APUE 学习笔记(三) 文件和目录

时间:2023-01-19 12:19:00

1. 文件类型

文件类型信息包含在 struct stat 里的 st_mode 成员

(1)普通文件, unix内核并不区分文本文件和二进制文件
(2)目录文件,这种文件包含了其他文件的名字以及指向这些文件有关信息的指针
(3)块特殊文件
(4)字符特殊文件
(5)FIFO, 常用于进程间通信,也称为管道
(6) 套接字socket,常用于进程间网络通信
(7)符号链接 ( 必须使用lstat函数,获取的是符号链接本身的类型信息,而不是符号链接所指向的文件的类型信息)
 

2.文件长度

stat结构成员st_size 以字节为单位,此字段只对 普通文件、目录文件、符号链接有意义
对于符号链接,st_size 成员表示 该符号链接所指向的文件的文件名长度
 

3.文件系统

 
APUE 学习笔记(三) 文件和目录
i节点是固定长度的记录项,包含有关文件的大部分信息
 
APUE 学习笔记(三) 文件和目录
(1)每个i节点中都有一个链接计数,其值是指向该i节点的目录项数。 只有当链接计数减少至0时,才可以删除该文件
stat结构体中 st_nlink成员表示链接计数。这种类型成为硬链接
 
(2)符号链接:该文件的实际内容包含了该符号链接所指向的文件的名字
符号链接是指向一个文件的间接指针,硬链接直接指向文件的i节点
硬链接有一些限制:
a.硬链接通常要求链接和文件位于 同一文件系统中
b.只有超级用户才能创建指向目录的硬链接
符号链接没有这两个限制,任何用户都可以创建符号链接,且没有文件系统限制
 
用open打开文件时,如果传递给open函数的路径名指定了一个符号链接,那么open跟随此链接到达你所链接的文件,如果该文件不存在,那么open出错
open函数跟随符号链接,读取符号链接本身必须使用 readlink函数
 
(3)每个分区的文件系统各自对它们的i节点进行编号,因此不能是一个目录项指向另一个文件系统的i节点,也就是ln命令不能跨越文件系统的原因
 

4.目录操作

opendir
readdir
seekdir
closedir
mkdir
rmdir