文件描述符:
一个命令通常都会打开三个文件,默认使用文件描述符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共享同一文件表项。