重定向和文件

重定向和文件

程序可以通过两种方式使用文件:

第一种方法是,显示使用特定的函数打开文件,关闭文件,读取文件,写入文件。

第二种方法是,设计能与键盘和品目互动的程序,通过不同的渠道重定向输入值文件和从文件输出。换言之,把stdin 流重新赋给文件。

重定向的一个主要问题是它与操作系统有关,与C无关。

1.重定向输入

重定向输入如操作的指令是 "<"

由于用的是VSCode运行程序时可在终端输入./ecoh_eof 指令

即可执行文件但是在那之前需要编译链接生成.exe文件。

看书本时重定向的输入上面写了words的文本文件,一开始以为是.txt的格式,但是在试了VScode本身的终端、git bash和系统自带的Powershell后始终显示不出来效果。

 

如上图所示。

后来发现原因所在的问题是因为有.txt文件的原因。于是删除了.txt的后缀运行程序后就有效果了。

在words文件中输入

aaaaaaaa
bbbbbbbb
cccccccc

C程序为:

#include <stdio.h>
int main(void)
{
    int ch;
​
    while((ch = getchar()) != EOF)
        putchar(ch);
​
    return 0;
}

但是在VSCode上的终端运行结果还是会报错于是换成了在git bash上运行。

运行效果如下:

 

运行成功,这很好的证明了以上的输入问题就是操作系统的原因,因为git bash是类似Linux的。

2.重定向输出

重定向输出操作使用的指令是 ">"

同样在git bash中输入./ecoh_eof >savewords

即可将输入的字符保存到savewords文件上。但是不清楚git bash中编辑文本是怎么退出的了,书上写的是Ctrl+z(DOS)或Ctrl+D(UNIX),我试了两种方法回车后都不行,然后又换回了VSCode有趣的是VSCode的终端可以使用 ">"

于是显示结果如下:

 

3.组合重定向

组合重定向要注意一点就是一条命令中输入文件名和输出文件名不能相同。原因是输出文件在输入之前已导致原文件的长度被截断了类似的有以下命令:

./echo_eof < mywords > mywords

重定向的命令与重定向的运算符的顺序无关例如以下两条命令的执行效果是一样的。

./echo_eof < mywords > savewords

./echo_eof > savewords < mywords

 

两个执行的效果是一样的。

重定向使用时的注意点

1.重定向运算符连接一个可执行程序(包括标准操作系统命令)和一个数据文件,不能用于连接一个数据文件和另一个数据文件,也不能用于连接一个程序和另一个程序。

2.使用重定向运算符不能读取多个文件的输入,也不能把输出定向至多个文件。

3.通常,文件名和运算符之间的空格不是必须的,除非是偶尔在UNIX shell、Linux shell 或Windows。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ryan菲特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值