标签:
重要知识点
输入/输出(I/O)
I/O是主存和外部设备(如磁盘驱动器、终端和网络)之间拷贝数据的过程。
Unix I/O
在unix中所有的I/O设备都被模型化为文件,这使得所有的输入输出都能以一种统一的方式进行。
Unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0)、标准输出(描述符为1)和标准错误(描述符为2)。头文件<unistd.h>定义常量STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO,可用来代替显式的描述符值。
打开和关闭文件
进程通过调用open函数来打开一个存在的文件或者创建一个新文件。
flags参数:
访问权限位:
进程通过close函数关闭一个打开的文件。
关闭一个已关闭的描述符会出错。
读和写文件
程序通过调用read和write函数来执行输入和输出的。
注:size_t:被定义为unsigned int,ssize_t被定义为int。
RIO包
RIO包会自动处理读写文件值出现的不足值。其提供了两类不同的函数:
元数据
元数据即文件的信息。应用程序能通过调用stat和fstat函数检索元数据。
内核表示打开文件的数据结构
I/O重定向
Unix外壳提供I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来。一般通过调用dup2函数实现I/O重定向。
标准I/O
ANSI C定义了一组高级输入输出函数,称为标准I/O库,为程序员提供Unix I/O的较高级别的替代。
该库提供:
标准I/O库将一个打开的I/O库将一个打开的文件模型化为一个流。对于程序员而言,一个流就是一个指向FILE类型的结构的指针。每个ANSI C程序开始时都有三个打开的流stdin、stdout和stderr,分别对应于标准输入、标准输出和标准错误:
FILE的流是对文件描述符和流缓冲区的抽象。
流缓冲区的目的(与RIO读缓冲区的一样):使开销较高的Unix I/O系统调用的数量尽可能小。
遇到问题
问题:
使用课本上定义的csapp.h编译错误。
解决方法:
从同学那获取了官网的csapp.h头文件,即可通过编译。
参考资料
《深入理解计算机系统》第10章系统级I/O。
标签:
原文地址:http://www.cnblogs.com/Ntime/p/4948507.html