第10章——系统级I/O
admin
2024-01-25 14:15:30
  • 输入/输出是在主存和外部设备之间复制数据的过程

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库

相关内容

热门资讯

太阳电缆跌2.00%,成交额6... 12月23日,太阳电缆盘中下跌2.00%,截至13:42,报9.79元/股,成交6.85亿元,换手率...
南亚新材股价涨5.04%,长信... 12月23日,南亚新材涨5.04%,截至发稿,报68.96元/股,成交3.52亿元,换手率2.24%...
中铁装配涨2.21%,成交额4... 12月23日,中铁装配盘中上涨2.21%,截至13:43,报16.22元/股,成交4913.16万元...
联得装备涨2.09%,成交额1... 12月23日,联得装备盘中上涨2.09%,截至13:44,报30.80元/股,成交1.78亿元,换手...
刚刚,钉钉掀桌子!狠人无招狂甩... 2026 年,很可能会被后来的人反复提起,作为人类工作方式分水岭的重要一年。 在今年的 OpenAI...