Linux-输入/输出重定向

重定向

我们在用echo曾经用过重定向,但是对重定向并不是非常清楚。下面来解释重定向到底是什么原理。
我们可以尝试把文件描述符的1关闭掉。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    close(1);
    int fd=open("txt",O_WRONLY);
    if(fd<0)
    {
        perror("open");
        return 1;
    }
    printf("%d\n",fd);
    fflush(stdout);
    close(fd);
    return 0;
}

这里写图片描述
此时,可以发现,本来应该输出到显示器上的内容,输出到了文件txt里,其中fd=1。这种现象实际上就是重定向。
常见的重定向:

  • >:输出重定向
  • >>:追加重定向
  • <:输入重定向

输出重定向

当我们使用printf时,一般都会往stdout中输出,但在stdout底层访问文件,还是会找fd=1,但是此时fd=1已经变成了txt的地址,不再是stdout的地址。所以输出的任何信息都会往文件中写入,也就完成了输出重定向。

这里写图片描述

下面使用:
这里写图片描述
注意:
shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。 无论左边命令执行是否成功。右边文件都会变为空。
当命令执行完,绑定文件的描述符也自动失效。0,1,2又会空闲。

输入重定向

首先测试用例测试以下:
这里写图片描述

其实输入重定向也很好理解,在理解了输出重定向之后,输入重定向其实就是将本该输入到stdout里的内容,输入到了重定向后的新文件中。

追加重定向

实际上就是在重定向的含义上加了追加,追加我们都知道,不覆盖之前内容,在之前内容之后继续写入。
下面测试:
这里写图片描述
这些测试用例都是非常简单的,只是为了验证功能。
显然,追加重定向只是在输出重定向的基础上增加了追加功能,与打开文件的方式有关。

总结

  • > 输出重定向到一个文件或设备 覆盖原来的文件
  • >! 输出重定向到一个文件或设备 强制覆盖原来的文件
  • >> 输出重定向到一个文件或设备 追加原来的文件
  • < 输入重定向到一个程序
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值