头文件#include <unistd.h>
dup 函数介绍
int dup(int oldfd);
功能:复制 oldfd 文件描述符,并分配一个新的文件描述符,新的文件描述符是调用进程文件描述符表中最小可用 的文件描述符。
参数:要复制的文件描述符 oldfd。
返回值:成功:新文件描述符。 失败:返回-1,错误代码存于 errno 中。
dup2 函数介绍
int dup2(int oldfd, int newfd)
功能:复制一份打开的文件描述符 oldfd,并分配新的文件描述符 newfd,newfd 也标识 oldfd 所标识的文件。
注意:newfd 是小于文件描述符最大允许值的非负整数,如果 newfd 是一个已经打开的文件描述符,则会关闭该文件,然后再复制。
参数:要复制的文件描述符 oldfd 分配的新的文件描述符 newfd
返回值:成功:返回 newfd 失败:返回-1,错误代码存于 errno 中
#include<stdio.h>
#include<unistd.h>
int main(int argc,char **argv)
{
int cfd1, cfd2;
char str1[] = "HI~\n";
char str2[] = "HI~ day\n";
cfd1 = dup(1);
cfd2 = dup2(cfd1, 7);
printf("cfd1 = %d\n, cfd2 = %d\n", cfd1, cfd2);
write(cfd1,str1,sizeof(str1));
write(cfd2,str2,sizeof(str2));
close(cfd1);
close(cfd2);
write(1,str1,sizeof(str1));
close(1);
write(1,str2,sizeof(str2));
printf("aaaaaaaaaa\n");
return 0;
}