视频地址:

http://player.bilibili.com/player.html?aid=31289365&bvid=BV1iW411d7hd&cid=85207140&page=16

课件地址:

对应于书中的第10章。


Linux将所有资源都看成文件的形式。

到这就进入了新的一部分,过去一直假设程序时独立运行的,但是其实应用程序可利用操作系统提供的服务来与I/O设备及其他程序通信,这一部分将学习Unix操作系统提供的基本I/O服务,以及如何利用这些服务来构造引用程序。


1 基础知识

**输入/输出(I/O)**是在主存和外部设备(磁盘驱动器、终端和网络)之间复制数据的过程。输入操作就是从I/O设备复制数据到主存,输出操作就是将主存数据复制到I/O设备。这里我们将所有I/O设备都抽象为Linux文件,即m个字节的序列,这样所有输入和输出操作都可以看成是对文件的读写,使得所有输入和输出都能以统一的方法来执行:

通过将I/O设备抽象为文件的形式,使得对I/O设备的输入输出统一为对文件的读写操作,而应用程序可以通过文件描述符来对指定的I/O设备进行操作。在创建进程时,内核会默认打开三个文件,标准输入(描述符为0)、标准输出(描述符为1)和标准错误(描述符为2),可通过STDIN_FILENOSTDOUT_FILENOSTDERR_FILENO代替描述符来访问这三个文件。当进程终止时,内核会关闭所有打开的文件,并释放内存资源。

在Linux中,文件具有不同的类型: