天天看点

《CSAPP》系统级I/O

前言:

     这一部分基本就是文件的读取与写入的介绍,然后讲诉了文件描述符表与文件打开表,以及健壮的RIO读写文件程序。这一部分与APUE以及UNP中的部分内容是很相似的,因此会介绍的比较简单。

我的github:

我实现的代码全部贴在我的github中,欢迎大家去参观。

https://github.com/YinWenAtBIT

第十章:系统级I/O

定义:

输入/输出是在主存和外部设备之间拷贝数据的过程,输入操作时外部设备拷贝到内存,输出是内存拷贝到外部的I/O设备

一、RIO包健壮的读写:

1. RIO包的灵感:

来自《UNIX网络编程》中的readn与writen函数已经readline函数。不过原本的readline函数不是线程安全的。这个RIO版本的改进了这个问题。

共享文件:

一、描述符表:

每个进程都有自己的描述符表,它的表项是由进程打开的文件描述符来索引的。每个打开描述符都指向文件表中的一个表项。

二、文件表:

打开文件的集合由文件表来表示,所有的进程共享这张表,每个文件表的表项,包括当前的文件位置,引用计数,以及一个指向v-node表中对应表项的指针。关闭一个描述符会减少相应的文件表表项的引用计数。内核会在计数为0 时删除这个表项。

《CSAPP》系统级I/O

I/O重定向:

使用dup2函数,将描述符指向想要指向的文件表项,即可实现IO重定向。

总结:

这一部分内容没有太多要注意的,已经在UNP中学习过。不再是问题。

继续阅读