(duplicate)复制
dup和dup2函数
int dup(int oldfd);
oldfd:已有的文件描述符
返回:新文件描述符
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc,char *argv[])
{
int fd=open(argv[1],O_RDONLY);
int newfd = dup(fd);
printf("newfd = %d\n",newfd);
write(newfd,"1234567",7);
return 0;
}
执行结果如下:
在Linux之中2就是to的意思
int dup2(int oldfd, int newfd);
参数1:旧文件描述符
参数2:新文件描述符
返回新文件描述符
把oldfd拷贝给newfd
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc,char *argv[])
{
int fd1=open(argv[1],O_RDWR);
int fd2=open(argv[2],O_RDWR);
int fdret=dup2(fd1,fd2);
printf("fdret=%d\n",fdret);
int ret = write(fd2,"1234567",7);
printf("ret = %d\n",ret);
dup2(fd1,STDOUT_FILENO);
printf("-------------------------------886\n");
return 0;
}
执行结果如下:
fcntl实现dup描述符
头文件:
#include <unistd.h>
#include <fcntl.h>
函数原型:
int fcntl(int fd, int cmd, ... /* arg */ );
cmd:F_DUPFD
参数3:被占用返回最小可用的。
未被占用,返回>=该值的文件描述符。
fcntl函数实现dup的作用:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
int main(int argc,char *argv[])
{
int fd1=open(argv[1],O_RDWR);
printf("fd1=%d\n",fd1);
int newfd1=fcntl(fd1,F_DUPFD,0);
printf("newfd=%d\n",newfd1);
int newfd2=fcntl(fd1,F_DUPFD,7);
printf("newfd2=%d\n",newfd2);
int ret = write(newfd2,"YYYYYYY",7);
printf("ret=%d\n",ret);
return 0;
}
执行结果如下: