第一点
linux各种文件类型和文件标识符
普通文件(-)
普通文件分为文本文件和二进制文件,文本文件就是方便人的读写,二进制文件不是编码就是数字,主要通过文件的后缀进行辨别!
目录文件(d)
就是文件夹(特殊文件)用vim也能打开,内部存在路径和文件列表,需要用特殊的API去操作目录文件。
设备文件(c)
对应的硬件设备(虚拟出来的)不在硬盘中存在,只是在文件系统中存在。例如:dev/sys/proc等
管道文件(p)
套接字文件(s)
符号链接文件(l)
第二点
常见的文件属性的获取
文件属性获取常用的API函数
先来看stat这个函数;两个形参,第一个用const修饰,所以是输入型参数,第二个结构体指针,是输出型参数。
怎么使用呢? 我们在输入型参数这个地方传一个文件进去,然后系统就会返回一个结构体类型的buf,这个buf中存放的就是这个文件的属性信息!
所以stat这个API的作用就是让内核将我们需要查找的文件的属性信息放入到我们传递给stat函数的buf中,当stat这个 API调用从内核返回的时候buf中就被填充这个文件正确的属性信息!
fstat与stat的区别:fstat是传一个已经打开的文件的文件描述符进去,而stat是传一个文件的文件名!
lstat与stat的差别:stat查阅的是符号链接查阅文件指向的文件的属性(源文件),lstat查阅的是符号链接文件本身的属性。
程序验证
下面我们写一个函数,来读取一个文件里面的一部分信息(属性)NAME就是1.txt的宏定义
最终的执行结果:
下图是通过命令行打开的新文件的参数,做对比!!!
上面的程序如果返回值是1则说明这个是一个文件夹(这个 宏后三位是DIR)否则则否!
譬如S_ISREG宏返回值是1便是这个文件时一个普通文件,如果文件不是普通文件就返回0
第二点
文件权限管理
access函数检查权限设置
文本权限的管控其实很复杂,一般很难确定对一个文件是否有某种操作权限!
access函数可以测试得到当前执行程序的那个用户在当前那个环境下对目标文件是否具有某种操作权限。
第一个参数是文件名,第二个参数是他的模式;比如F_OK、W_OK、R_OK、X_OK、(代表是否存在、可写、可读、可执行)
chmod/fchmod与权限修改
我们经常在linux命令行中各一个文件权限的时候会用命令,chmod 777 XXX,此时的777是咋来的?
在我们文件的权限中,一般由十个字符表示,第一个字符表示当前的文件的类型,接下来的三个为一组,总共三组,分别为用户、用户组、其他人的权限,这三位分别为r、w、x,
chmod修改权限的方法有两种,分别为符号法、数字法。在数字法中r、w、x,分别为4.2.1.所以chmod就是权限全开。
umask与文件权限掩码
文件掩码是linux系统中维护的一个全局设置,umask的作用是用来设定我们系统中新创建的文件的默认权限的。
umask命令就是用umask API实现的
第三点
读取文件目录
opendir与readdir函数
opendir打开一个目录后得到一个DIR类型的指针给readdir使用
readdir函数调用一次就会返回一个struct dirent类型的指针,这个指针指向一个结构体变量,这个结构体变量里面记录一个目标项(所谓目录项就是目录中的一个子文件。)
readdir调用一次只能独处一个目录项,要想读出目录中的所有子文件,就需要多次调用(不会重复),当readdir放回一个null,说明就读完了!