dup和dup2两个系统调用的作用都是拷贝文件描述符。
在man手册中查询dup和dup2的原型如下:
#include <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
dup用于复制oldfd参数所指的文件描述符,当复制成功时返回最小的尚未被使用的文件描述符。
dup2区别于dup的地方在于dup2可以指定新文件描述符的数值。若newfd已经被程序使用,系统就会将其关闭以释放该文件描述符,若oldfd与newfd相等,则dup2返回newfd而不关闭它。
为了更好的理解dup和dup2,先介绍一下文件描述符:
文件描述符是一个较小的正整数,类似于编号,每个进程在内核的进程控制块(PCB)中都保存着一份文件描述符表,文件描述符就是这个表的索引(每个文件描述符占用表中一个表项),文件描述符表中每个表项都有一个指向已打开文件的指针,已打开的文件在内核中用file
结构体表示,文件描述符表中的指针指向file
结构体。当进程用ope