I/O
定义:I/O即Input/Output,输入输出
流:
• 流是一种对连接的抽象
• 换句话说,输入流需要两个连接,每端各一个。文件端连接提供流的来源,程序端连接将流的流出部分转储到程序中(文件端连接可以是文件,也可以是设备,如键盘)。 同样,对输出的管理包括将输出流连接到程序以及将输出目标与流关联起来。这就像将字节(而不是水)引入到水管中。
• C++程序把输入和输出看作字节流。输入时,程序从流中抽取字节;输出时,程序将字节插入到输出流中。
• 输入流中的字节可能来自键盘,也可能来自存储设备或其他程序。
• 同样,输出流中的字节可以流向屏幕、打印机、存储设备或其他程序。
• 流充当了程序和流源或流目标之间的桥梁。这使得C++程序可以以相同的方式对待来自键盘的输入和来自文件的输入。
• C++程序只检查字节流,而不需要知道字节来自何方。
事实上,在Linux中程序一般存在三个流:输入流(stdin)、输出流(stdout)、错误流(stderr)
缓冲区:
缓冲区是用来更高效地处理输入和输出,即存在于输入流和输出流中
• 缓冲区是用作中介的内存块,也就是说在内存里
• 它是字节流的一个中介点
• 通常,像磁盘驱动器这样的设备以512字节(或更多)的块为单位来传输数据到内存,而程序通常每次是一个字节一个字节读取。
• 缓存区帮助匹配这两种不同的信息传输速率。
• 例如,假设程序要计算记录在硬盘文件中的金额。程序可以从文件中读取一个字符,处理它,再从文件中读取下一个字符,再处理,依次类推。
• 从磁盘文件中每次读取一个字符需要大量的硬件活动,速度非常慢。
• 但有了缓冲区,我们可以从磁盘上读取大量信息,将这些信息存储在缓冲区中,然后每次从缓冲区里读取一个字节。因此从内存中读取单个字节的速度比从硬盘上读取块很多,所以这种方法更快,也更方便。