【C语言】重定向和文件 | 您所在的位置:网站首页 › cmd重定向到虚无 › 【C语言】重定向和文件 |
重定向和文件
一、相关基础知识
重定向:在计算机领域,重定向是大多数命令行解释器所具有的功能,包括各种可以将标准流重定向用户规定地点的Unix shells。
输入重定向:可以使程序能够使用文件代替键盘作为输入(则可编辑测试用例文本进行输入)
输出重定向:可以使程序能够使用文件代替屏幕作为输出(则可将结果输出到文件)
文件结尾:操作系统需要某种方式来判断每个文件起始和结束的位置,一般有两种方法:一种是检测文件结尾的的一个特殊字符来进行标识,另一种是让操作系统存储文件大小的信息来进行判断 对于这两种不同的方法,C的处理方式是让getchar()函数在到达文件结尾时返回一个特殊值,而不管操作系统采用哪种方法,赋予该值得名称是EOF(end of file),其值一般是-1,在stdio.h文件中定义。 我们则可以使用下列程序进行判断是否读入到文件结尾: while((ch=getchar())!=EOF) // 当ch为EOF时停止
当然有时在命令行中我们也需人为制造结尾,也即需要结束程序时,键入: CTRL+D(Unix)或 CTRL+Z(DOS) 二、具体内容所有字符包括回车、空格等等一切键盘输入! 重定向标准输入输出:一、输入重定向 在WINDOWS下存在一个需要输入的已经编译好的程序1.exe 以及编写好的一个符合输入的 2.txt 文本 则可在DOS下直接使用:(需这2个文件在同一目录,且DOS已经切换到该目录)
1.exe 符号将输出重定向到该文件,该重定向将stdout从显示设备重定向到5.txt文本文件, 注:1、若5.txt在当前目录下不存在,则会自动新建一个5.txt 2、若5.txt在当前目录下已存在,则会删除原文件,并建立一个新的文件进行代替! 3、若要将新内容添加在文件末尾,请使用>>操作符,也即:4.exe>>5.txt
三、组合重定向 可以使用如: 1.exe 3.txt 1.exe > 3.txt tempfile command2 > 两侧的空格都是可选的,可能有些系统规定重定向符号和文件名之间不允许有空格 三、分析总结 也即使用重定向可以以文本与输入流联系的方式模拟我们的键盘输入,包括输入回车,空格等等一切,可节约时间,编好一次测试用例即可 以及可以将输出打印到文本文件中 程序使用的都是行缓冲区,只有遇到一个换行字符才回将缓冲区中的内容送出去,也即我们可在输入一个换行符前随意删减,直到输入一个回车才清空缓冲区,将输入送出至程序 另如在DOS下运行exe程序,可使用CTRL+D(Unix)或 CTRL+Z(DOS)模拟文件结尾结束程序 四、实例测试 测试程序:#include int main(void) { int ch;
while((ch=getchar())!=EOF) putchar(ch);
return 0; }
输入:a 回车 输出:a 回车 输入:b 回车 输出:b 回车 输入:abc 回车 输出:abc 回车 输入:回车 输出:回车 输入:^Z 回车 输出:^Z 回车 输入:a空格b制表符c 回车 输出:a空格b制表符c 回车 输入:CTRL+Z 显示出 ^Z 再按回车程序结束
可见只有输入回车才显示,也即只有遇到一个换行字符才回将缓冲区中的内容送至程序,以及getchar()函数可以读入回车 以输入CTRL+Z(DOS) 人为制造文件结尾,且程序以 ^Z 判断为结尾,且不可人为直接输入 ^Z 为结尾
回车也是一个字符,当输入a 回车时,对应的输出也是 a 回车! 测试程序:#include int main(void) { int ch; int i; i=1; while((ch=getchar())!=EOF) { printf("执行%d次\n",i); i=i+1; } return 0; }
输入:abc回车 输出:执行4次 输入:abc空格de制表符fg%回车 输出:执行11次 |
CopyRight 2018-2019 实验室设备网 版权所有 |