dup 和 dup2 都可以用来复制一个现存的文件描述符。经常用来重新定向进程的 STDIN,STDOUT,STDERR
#include<unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
- 这两个函数我们可以用来复制文件描述符。
- 其中oldfd和newfd分别是复制前的文件描述符和复制后的文件描述符。
- 这两个函数的调用都复制文件描述符oldfd,且返回值都为新的文件描述符。
- 不同点是:dup()的返回值是最小的未用文件描述符;dup2()的返回值是预先指定的文件描述符newfd。
- 对于dup2(),如果文件描述符newfd正在被使用,则先关闭newfd;如果newfd同oldfd,则不关闭该文件正常返回。
了解一下文件描述符在内核中的形态.
一个进程在存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2)
0与进程的标准输入相关联
1与进程的标准输出相关联
2与进程的标准错误输出相关联