linux 学习笔记 - 重定向

本文详细介绍了Linux命令行中的文件描述符,包括默认的stdin(0), stdout(1)和stderr(2)。内容涵盖了重定向的基本概念,如使用不同的重定向符号(<, >, >>)实现输入输出的控制。此外,还讨论了dup和dup2系统调用在复制文件描述符时的作用,以及它们在进程文件表中的工作原理。
摘要由CSDN通过智能技术生成

文件描述符:

一个命令通常都会打开三个文件,默认使用文件描述符0,1,2来指代这个三个文件

stdin 0 标准输入流 (键盘)
stdout 1 标准输出流 (终端)
stderr 2 标准错误输出流 (终端)

重定向

输入重定向

命令符号格式作用
命令 < 文件将指定文件作为命令的输入设备
命令 << 分界符表示从标准输入设备(键盘)中读入,直到遇到分界符才停止(读入的数据不包括分界符)
命令 < 文件 1 > 文件 2将文件 1 作为命令的输入设备,该命令的执行结果输出到文件 2 中。
命令 < 文件将指定文件作为命令的输入设备

命令 << 分界符

command <<分界符
内容
内容

分界符

在这里插入图片描述

输出重定向

命令符号格式作用
命令 > 文件将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,会清空原有数据,再写入新数据。
命令 2> 文件将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,会清空原有数据,再写入新数据。
命令 >> 文件将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。
命令 2>> 文件将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,新数据将写入到原有内容的后面。
命令 >> 文件 2>&1
或者
命令 &>> 文件
将标准输出或者错误输出写入到指定文件,如果该文件中已包含数据,新数据将写入到原有内容的后面。注意,第一种格式中,最后的 2>&1 是一体的,可以认为是固定写法。

常见形式几种的重定向

  • > file #将标准输出1重定向到 file 里
  • 1> file #将标准输出1重定向到 file 里,与上面的写法功能一样
  • 2> file #将标准错误输出1重定向到 file 里
  • &> file #将标准输出1 与 标准错误输出2 一起重定向到 file 里

重定向系统API

dup和dup2

#include <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
返回 : 错误返回-1,成功返回新的文件描述符
功能 : 复制文件描述符

  • 当调用dup函数时,内核在进程中创建一个新的文件描述符,此描述符是当前可用文件描述符的最小数值,这个文件描述符指向oldfd所拥有的文件表项。
  • dup2和dup的区别就是可以用newfd参数指定新描述符的数值,如果newfd已经打开,则先将其关闭。
    如果newfd等于oldfd,则dup2返回newfd, 而不关闭它
    。dup2函数返回的新文件描述符同样与参数oldfd共享同一文件表项。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值