输入输出的重定向

序言

看到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
3
4
5
6
7
8
9
10
#include<stdio.h>
int main()
{
char a[100];
fscanf_s(stdin,"%s",&a,20);//"20"为额外提供一个表示缓冲区大小的参数
//fscanf(stdin,"%s",&a);
//scanf("%s",&a);
//展示几种输入
printf("%s",a);
}

运行后生成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的输入

总结

蛮有趣的嘛!