【Linux】系统级IO

什么是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函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值