dup,dup2
名称:转存(复制)一个文件描述符
总揽:
#include<unistd.h>
int dup(int oldfd);
int dup2(int oldfd,int newfd);
int dup(int oldfd);
int dup2(int oldfd,int newfd);
描述:
dup()和dup2()函数用来创建一个文件描述符oldfd的备份.
执行成功则返回新的文件描述符.旧的文件描述符和新的文件描述符共享文件的偏移量
和文件的状态标志;例如,若其中一个文件描述符的文件偏移量被lseek()函数修改过的话则
另外一个文件描述符的文件偏移量也被修改.
但是两个文件描述符不共享文件描述符标志(close-on-exec标志),转存时该标志被关闭.
dup()函数使用一个最小的未用的整数作为新文件描述符.
dup2()函数使用newfd作为新文件描述符,若原来newfd存在则必要时关闭它
返回值:执行成功则返回新的文件描述符,若发生错误则返回-1.
实例:
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int fd;
fd=open("test.txt",O_RDWR);
if(fd==-1){
perror("Fail to open");
exit(1);
}else
printf("Open Ok\n");
{
int fd;
fd=open("test.txt",O_RDWR);
if(fd==-1){
perror("Fail to open");
exit(1);
}else
printf("Open Ok\n");
if(close(1)==-1){
perror("Fail to close");
exit(1);}
perror("Fail to close");
exit(1);}
if(dup(fd)==-1){ /*将fd复制为1,也就是复制文件到标准输出位置*/
perror("fail to dup");
exit(1);}else
printf("Dup OK\n");
printf("Hello World\n");
perror("fail to dup");
exit(1);}else
printf("Dup OK\n");
printf("Hello World\n");
return 0;
}
}
转载于:https://blog.51cto.com/huangyandong/678724