C学习笔记(八)字符输入输出和输入确认

时间:2020-12-28 22:23:08

缓冲区

缓冲区分为两类:完全缓冲(fully buffered)I/O和行缓冲(line-buffered)I/O。完全缓冲在缓冲区满时被清空(内容被发送至目的地)。这种类型常出现在文件输入中。缓冲区的大小取决于系统。行缓冲在遇到换行字符时被清空。键盘输入是标准的行缓冲。

文件、流和键盘输入

c程序处理一个流而不是一个文件。键盘输入由一个被称为stdin的流表示,而到屏幕(或电子传真机、或其他输出设备)上的输出由一个被称为stdout的流表示。

文件结尾

检测文件结尾的一种方法是在文件中放置一个特殊字符来标志结尾。例如CP/M、IBM/DOC和MS/DOC的文本文件中曾使用一种方法。使用内嵌的Ctrl+Z字符来标识文件结尾。

第二种方法是让操作系统存储文件大小的信息。如果一个文件有3000字节,而且程序已经读取了3000字节,则改程序就到达了文件结尾。

对于这两种方法,c的处理方法是让getchar()在到达文件结尾时返回一个特殊值,此值名称为EOF(End Of File)。

重定向和文件

令程序和文件一同工作有两种方式。一种方式是明确的使用打开文件、关闭文件、读文件、写文件等专门函数。

第二种方式是使用一个设计用于与键盘和屏幕共同工作的程序,但是使用不同通道重定向输入和输出,例如输入到文件和从文件输出。

输入重定向

假如你编译了echo_eof.c,要运行程序,键入该程序的名字。

echo_ eof

假设你要对一个名为words的文本文件使用该程序。

echo_ eof<words

<符号是Unix、Linux重定向运算符。该运算把words文件的内容引导至echo_eof程序。

输出重定向

假如你想echo_eof将你的键盘输入发送给一个名为mywords的文件。

echo_ eof>mywords

>会建立一个新文件,然后将echo_eof的输出重定向到该文件。

组合重定向

假如你希望制作mywords的一个副本,并将其命名为savewords,只需发出命令:

echo_ eof<mywords>savewords

下面的语句同样可以实现,重定向运算符的顺序无关紧要:

echo_ eof>savewords<mywords