第10章——系统级I/O

  • 输入/输出是在主存和外部设备之间复制数据的过程

Unix I/O

  • Unix I/O:将设备被优雅地映射为文件,允许Linux内核引出一个简单、低级的引用接口,使得所有的输入和输出都能以一种统一且一致的方式来执行:
    • 打开文件:内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标识这个文件
    • 打开标注输入、标准输出、标准错误文件
    • 改变当前的文件位置:从文件开头起始的字节偏移量
    • 读写文件
    • 关闭文件

文件

  • Linux文件类型:
    • 普通文件:文本文件(只含有ASCII或Unicode字符的普通文件)和二进制文件
    • 目录:包含一组链接的文件,其中每个链接都将一个文件名映射到一个文件,这个文件也可能是另一个目录
    • 套接字:用来与另一个进程进行跨网络通信的文件

打开和关闭文件

  • open函数将filename转换为一个文件描述符,并且返回描述符数字
  • close函数关闭一个打开的文件

读和写文件

  • 调用readwrite函数来执行输入和输出

用RIO包健壮地读写

  • RIO的无缓冲的输入输出函数:直接在内存和文件之间传送数据,没有应用级缓冲
  • RIO的带缓冲的输入函数:高效地从文件中读取文本行和二进制数据,是线程安全的

读取文件元数据

  • 通过调用statfstat函数可以检索关于文件的信息(元数据),stat的输入是文件名,fstat的输入是文件描述符

读取目录内容

  • readdir函数来读取目录的内容,输入为目录流,返回指向目录流中下一个目录项的指针,没有则返回NULL。目录项是一个结构,包含文件名和文件位置
  • opendir函数以路径名为参数,返回指向目录流的指针,流是对条目有序列表的抽象,在这里是指目录项的列表
  • closedir函数关闭流并释放其所有的资源

共享文件

  • 内核用三个相关的数据结构来表示打开的文件:
    • 描述符表:每个进程都有它独立的描述符表,每个打开的描述符表项指向文件表中的一个表项
    • 文件表:打开文件的集合是由一张文件表来表示的,所有进程共享这张表,每个文件表的表项组成包括当前的文件位置、引用计数,以及一个指向v-node表中对应表项的指针
    • v-node表:同文件表一样,所有的进程共享这张v-node表,每个表项包含stat结构中的大多数信息
  • 多个描述符可以通过不同的文件表表项来引用同一个文件

I/O重定向

  • dup2函数复制描述符表表项oldfd到描述符表表项newfd,覆盖后者以前的内容

标准I/O

  • C语言定义了一组高级输入输出函数,称为标准I/O库
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值