文件描述符的复制函数dup、dup2:
函数原型:
#include <unistd.h> //头文件
int dup(int oldfd); //复制一个文件描述符,并返回新的文件描述符,失败返回-1
int dup2(int oldfd, int newfd); //指定一个新的文件描述符,成功返回新的文件描述符,失败返回-1
说明:文件描述符的复制不会复制内核管理内中的文件表,也就是说:两个文件描述符共用一个文件表
dup.c
//打开文件
int fd = open("b.bat",O_CREAT|O_RDWR); //fd = 3
if( -1 == fd)
perror("错误:"),exit(-1);
printf("fd = %d\n",fd);
//文件描述符赋值
int fd2 = dup(fd);
printf("fd2 = %d\n",fd2); //fd2 = 4
//准备数据
char * str = "ABCDE";
char * str2 = "abcdef";
char * str3 = "123456";
//使用以上两个文件描述符写入文件
write(fd,str,strlen(str));
write(fd2,str2,strlen(str2)); //因为共用文件表,所以写入的数据会被追加到末尾
//使dup2函数指定一个新的文件描述符
int fd3 = dup2(fd,10); //指定一个新的文件描述符10并返回。
write(fd3,str3,strlen(str3));
close(fd); //各自关闭文件描述符
close(fd2);
close(fd3);
//查看文件写入