输入输出的重定向
输入输出的重定向
序言
看到C程序设计语言p147:
在许多环境中,可以使用符号’<’ or ‘>’ 来实现输入重定向,它将把键盘输入替换为文件输入:如果程序 prog 中使用了函数 getchar,则命令行
prog < infile
将使得程序 prog 从输入文件 infile(而不是从键盘)中读取字符。实际上,程序 prog 本身并不在意输入方式的改变,并且,字符串”<infile”也并不包含在 argv 的命令行参数中。
如果输入通过管道机制来自于另一个程序,那么这种输入切换也是不可见的。比如,在某些系统中,下列命令行:otherprog | prog
将运行两个程序 otherprog 和 prog,并将程序 otherprog 的标准输出通过管道重定向到程序 prog 的标准输入上。
函数int putchar(int)
用于输出数据。putchar(c)将字符 c 送至标准输出上,在默认情况下,标准输出为屏幕显示。如果没有发生错误,则函数putchar
将返同输出的字符;如果发生了错误,则返回 EOF。
同样,通常情况下,也可以使用“>输出文件名”的格式将输出重定向到某个文件中。例如,如果程序 prog 调用了函数putchar
,那么命令行prog > 输出文件名
将把程序 prog 的输出从标准输出设备重定向到文件中。如果系统支持管道,那么命令行prog | anotherprog
将把程序 prog 的输出从标准输出通过管道重定向到程序 anotherprog 的标准输入中。
函数 printf 也向标准输出设备上输出数据。我们在程序中可以交叉调用函数 putchar 和 printf,输出将按照函数调用的先后顺序依次产生。
实操实现
前期准备
在beta文件夹内创建一个c文件:
1 |
|
运行后生成2.exe
创建文档1.txt,内容为:
Future is now!
创建文档3.txt,内容为:
now
正式开始!
- 打开cmd窗口
在beta文件夹内,地址框改为cmd,并按Enter
- 输入
2.exe<1.txt \1.txt作为输入
2.exe>1.txt \1.txt作为输出(文档原先不存在就创建,存在就替换)
只显示 Future 的原因与字符串的输入有关 - 2.exe>>1.txt//“>>”在原始文档中追加内容
此时1.txt中内容为:Future is now!now
而 3.txt内容不变
管道 | 的功能
1.exe|2.exe
把1.exe的输出传给2.exe的输入
总结
蛮有趣的嘛!