什么是IO
IO就是主存和外部设备(磁盘,终端或网络等)之间复制数据的过程
输入是从iO设备输入到主存,输出是从主存复制数据到IO设备
Unix IO
1. 概述
大多数语言都提高了IO的较高级别的工具,没有必要使用UnixIO,但是Unix IO是比较底层的
Linux中一切皆文件,所有的IO设备也都被模型化为文件,一个Linux文件就是m个字节的序列,这种将设备映射成文件的方式,允许Linux内核引出一个简单,低级的应用接口,成为Unix IO
- 打开文件,内核返回一个文件描述符
- Linux创建的每个进程开始时都有三个打开的文件
- 标准输入
- 标准输出
- 标准错误
- 设置文件的当前位置seek
- 读写文件,当读的其实位置大于文件长度,返回EOF
- 关闭文件
2. 主要的文件类型
- 普通文件
- 目录
- 套接字
3. 打开和关闭文件
- open 打开文件
- close 关闭文件
4. 读和写文件
- read 读文件
- write 写文件
- lseek 修改当前文件的位置
5. 不足值
有的时候,read和write传送的字节达不到应用程序的要求,出现这种情况可能是因为:
- 读的时候出现EOF
- 从终端读取文本行
- 读和写网络套接字
为了防止不足值,我们可以通过RIO包进行简装的读写
6. 查看文件元数据
- stat 使用文件名输入
- fstat 使用文件描述符输入
7. 读取目录内容
- opendir 以路径名为参数
8. 共享文件
内核用三个相关的数据结构来表示打开的文件
- 描述符表 进程独立,每个表项指向文件表的一个表项
- 文件表 进程共享,每个表项包含当前文件的位置,指向它的描述符表数量,以及指向v-node表对应表项的指针,当描述符表项计数为0时,就会删除文件表项
- v-node表 进程共享,包含stat结构中大多数信息
这是引用两个不同文件的情况:
9.IO重定向
使磁盘文件和标准输入输出联系起来
比如
ls > foo.txt
它使用的是dup2函数
10.标准IO
C语言定义了一组高级输入输出函数,叫做标准IO库
它提供了UnixIO函数的一个更加完整的带缓冲的替代品
总结
- 标准IO是首选,除了stat标准IO里没有
- 对网络套接字的IO使用RIO函数