int dup(int oldfd);
返回值:
-1-----失败
其他---新的文件描述符
int dup2(int oldfd, int newfd);
返回值:
-1--------失败
其他-----返回newfd新的文件描述符
图解:
PS:
tty表示终端,0,1,2表示含义系统默认为下表:
分类文件--------------描述符------------文件号
标准输入------- STDIN_FILENO----------0
标准输出--------- STDOUT_FILENO-----1
标准出错信息---- STDERR_FILENO ----2
dup示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(){
int fd = dup(STDOUT_FILENO);
fprintf(fdopen(fd,"w"),"%d printf:Hello dup\n",fd);
}
dup2示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#define FILE_MODE (S_IWUSR|S_IRUSR|S_IRGRP|S_IROTH)
int main(){
int save_fd = dup(STDOUT_FILENO);
int fd = open("./test",O_CREAT|O_RDWR,FILE_MODE);
if(-1 == dup2(fd,STDOUT_FILENO)){
perror("dup2 error0");
return 1;
}
close(fd);
printf("%d printf:Hello dup\n",fd);
fflush(stdout);// 一定要清除缓冲区,否则会输出到终端
if(-1 == dup2(save_fd,STDOUT_FILENO)){
perror("dup2 error");
return 1;
}
close(save_fd);
printf("%d printf:this is save\n",save_fd);
}