头文件
#include<unistd.h>
函数定义:
int dup(int oldfd)//复制一个文件描述符,返回一个新的文件描述符,指向同一个FILE结构体
int dup2(int oldfd,int newfd)//复制一个文件描述符,并且指定新的文件描述符是多少
说明:
dup和dup2都是用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。
如果两个文件描述符指向同一个file结构体,File Status Flag和读写位置只保存一个份在file结构体中,
并且file结构体的引用计数为2,如果两次open同一个文件得到两个文件描述符,则每个描述符对应一个不同的file结构体,
可以有不同的File Status Flag和读写位置,注意区分这两种情况
举例:
#include<unistd.h>
#include<sys/stat.h>
#include<error.h>
#include<sys/types.h>
int main(void){
int fd,save._fd;
char msg[]="This is a test\n";
fd=open("somefile",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);//创建somefile文件,并且指定它 的权限位0600;
if(fd<0){
perror("open");//打开失败打印出错信息
exit(1);
}
save_fd=dup(STDOUT_FILENO);//复制一个文件描述符
dup2(fd,STDOUT_FILENO);//复制一个fd文件描述符,并指向STDOUT_FILENO
close(fd);//关掉fd文件描述符
write(STDOUT_FILENO,msg,strlen(msg);//向STDOUT_FILENO写数据
dup2(save_fd,STDOUT_FILENO);//复制一个save_fd文件描述符,并指向STDOUT_FILENO
write(STDOUT_FILENO,msg,strlen(msg));//向STDOUT_FILENO写数据
colse(save_fd);//关掉save_fd文件描述符
return 0;
}