默认情况下,使用标准I/O包的C程序将标准输入作为其输入源,即标识为stdin的流
stdin流是作为向计算机中读取数据的常规方式而建立,可以是键盘、语音等不同输入设备
现代计算机还可以从文件中需求其输入,而不仅仅是传统的输入设备
程序与文件一同工作的2种方式:
1)使用打开文件、关闭文件、读文件、写文件等专门的函数;
2)使用一个设计用于与键盘和屏幕共同工作的程序,但是使用不同通道重定向(redirect)输入和输出,即将stdin流重新分配至文件
重定向与操作系统而不是C相关联
一、输入重定向
输入重定向:使程序能够使用文件代替键盘作为输入
文本文件(text file):包含文本的文件,在该文件中数据以人类可读的字符形式存储
1)示例代码:
#include <stdio.h>
int main(void)
{
int c;
// 输入回显,遇到EOF时终止
while((c = getchar()) != EOF)
{
putchar(c);
}
return 0;
}
2)调试,生成.exe文件
3)在.exe文件相同目录下新建.txt文件,输入字符内容,保存
hello world!
HELLO WORLD!
0123456789
!@#$%^&*()
4)调试,输入指令,调取文件内容到屏幕
test34 < text34.txt
二、输出重定向
输出重定向:使程序能够使用文件代替屏幕作为输出
1)示例代码:
#include <stdio.h>
int main(void)
{
int c;
// 输入回显,遇到EOF时终止
while((c = getchar()) != EOF)
{
putchar(c);
}
return 0;
}
2)调试,输入指令和数据,将键盘输入数据存储到text.34文件中
test34 > text34.txt
3)程序运行结束,打开text34.txt文件
三、组合重定向
组合重定向:可以将计算机中一个文件的内容复制到另一个文件中
1)创建两个.txt文件,f1.txt内包含内容,f2.txt为空
2)调试界面直接输入指令
test34 < f1.txt > f2.txt
test34 > f2.txt > f1.txt // 两种顺序均可,因为重定向运算符的顺序无关紧要
3)f1中的内容会被复制到f2中
注意:不要对同一命令的输入和输出使用相同的文件名
重定向使用规则:
1)重定向运算符将一个可执行程序与一个数据文件连接起来;不能用于一个数据文件与另一个数据文件的连接;不能用于一个程序与另一个程序的连接
2)使用重定向运算符时,输入不能来自一个以上的文件,输出不能定向至一个以上的文件
3)文件名称和操作符之间的空格不是必需的
其他运算符:
1)运算符>>:向一个现有文件的末尾追加数据
2)运算符(|):将一个程序的输入与另一个程序的输入连接起来
四、注意
1)重定向可以把键盘输入程序用于文件,要使其工作,程序必须能够检测文件尾
2)重定向是个命令行概念,需要通过在命令行键入特殊符号来指示