一切皆文件
Linux内核
屏蔽硬件区别,把所有硬件设备抽象成文件,提供统一的接口给用户使用。
虚拟文件系统
抽象层:对文件的访问实际上是对抽象层的访问
抽象对象:封装了底层读写细节,使用c语言的多态来实现具体文件系统接口
虚拟文件系统层次结构
普通文件系统
1.ext4
2.fat32
3.ubifs
特殊文件系统
1.进程文件系统:procfs,挂载在/proc,存放进程相关信息,任务管理器。
2.设备文件系统:devfs,挂载在/dev,存放硬件操作接口
文件描述符和打开模式
系统IO编程
直接使用linux开放出来的系统IO接口
- open
- write
- read
- lseek //读写指针偏移,写入和读出都是用同一个指针,所以在写入n个数据后,读写指针会偏移n,要全部读出数据,就要把读写指针重新偏移至文件起始位置。
- sync //把数据从也缓冲区写入磁盘
- close
文件描述符
特殊的文件索引
进程
每个程序本质上就是一个进程
实际上就是进程中的file_struct结构体成员fa_array的数组下标
文件打开模式
主模式 //只能使用一个,互斥
- O_RDONLY:只读模式
- O_WRONLY:只写模式
- O_RDWR:读写模式
副模式//可多个一起用 - O_CREAT:当文件不存在,需要去创建文件
- O_APPEND:追加模式
- O_DIRECT:直接IO模式
- O_SYNC:同步模式
- O_NOBLOCK:非阻塞模式
标椎IO编程
使用glibc库的库函数,c标椎库实现了一个io缓存区
常见标椎IO函数
- fopen
- fwrite
- fclose
- fseek
- fflush
文件IO的五大模式
- 阻塞模式
- 非阻塞模式
- IO多路复用
- 异步IO
- 信号驱动IO