CSAPP第十章:系统级I/O部分概述
一.UNIX I/O
在Linux(UNIX)中,所有的I/O设备(例如网络、磁盘和终端)都被模型化为文件,而所有的输入和输出都被当做对相应的文件的读和写来执行。一句话概括就是,在Linux(UNIX)中,一切皆文件。
而文件实际上可以看做是字节的序列。因为所有的 I/O 设备也是用文件来表示的,比如:
./dev/sda2 (/usr 磁盘分区)
/dev/tty2 (终端)
甚至连内核也是用文件来表示的:
/boot/vmlinuz-3.13.0-55-generic (内核镜像)
/proc (内核数据结构)
所以内核可以利用称为 Unix I/O 的简单接口来处理输入输出,比如使用 open() 和 close() 来打开和关闭文件,使用 read() 和 write() 来读写文件,或者利用 lseek() 来设定读取的偏移量等等。
二.文件分类
因为文件繁多,为了区别不同文件的类型,会有一个 type 来进行区别:
普通文件:包含任意数据
目录:相关一组文件的索引
套接字 Socket:和另一台机器上的进程通信的类型
三.打开和关闭文件
进程是通过调用open函数来打开一个已存在的文件或者创建一个新文件,
如下面所示;
1.#include <sys/types.h>
2.#include <sys/stat.h>
3.#include <fcnt1.h>
4.
5.int open(char *filename,int