8.4 重定向和文件
输入和输出涉及函数、数据和设备。
在默认情况下,C程序使用标准I/O包查找标准输入作为输入源,这就是前面介绍过的stdin流,它是把数据读入计算机的常用方式。它可以是一个过时的设备,或是键盘,甚至是一些先进技术,如语音输入。然而,现代计算机非常灵活,可以让它到别处查找输入。尤其是,可以让一个程序从文件中查找输入,而不是从键盘。
程序可以通过两种方式使用文件。第1种方式是,显式使用特定的函数打开文件、读取文件、写入文件、诸如此类。
第2种方式是,设计能与键盘和屏幕互动的程序,通过不同的渠道重定向输入至文件和从文件输入。换言之,把stdin流重新赋给文件,继续使用getchar()函数从输入流中获取数据,但它并不关心从流的什么位置获取数据。虽然这种重定向的方法在某些方面有些限制,但是用起来比较简单,而且能让读者熟悉普通的文件处理技术。
重定向的一个主要问题使它与操作系统有关,与C有关。尽管如此,许多C环境中(包括UNIX、Linux和Windows命令提示模式)都有重定向特性,而且一些C实现还在某些缺乏重定向特性的系统中模拟它。苹果OS X运行在UNIX上,故可用Terminal应用程序来使用UNIX命令模式。
8.4.1 UNIX、Linux和DOS重定向
UNIX(运行命令行模式)、Linux(ditto)和Windows命令行模式(模仿旧式DOS命令行环境)都能重定向输入、输出。重定向输入让程序使用文件而不是键盘来输入,重定向输出让程序输出值文件而不是屏幕。
1. 重定向输入
windows环境下编译echo_eof.c生成echo_eof.exe可执行文件,运行echo_eof.exe:<