首页 > 代码库 > Linux编程 ---- dup函数

Linux编程 ---- dup函数

dup,dup2,dup3函数

      顾名思义,dup及duplicate的简写,也就是复制的意思。而事实上这几个函数的功能也确实是复制文件描述符。那为什么要复制文件描述符呢?呵呵,我认为是程序员想偷懒,因为这个功能可以进行输入输出重定向。

 

下面这个程序将实现文件复制功能

 1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<fcntl.h> 4 #include<stdlib.h> 5 #include<sys/stat.h> 6 #include<unistd.h> 7 #include<errno.h> 8 #include<string.h> 9 10 void err_exit(const char *msg)11 {12     fprintf(stderr,"%s\n",msg);13     exit(1);14 }15 16 int main(int argc, const char *argv[])17 {18     if(argc != 3)19         err_exit("Argument Error!");20     int fdr = open(argv[1],O_RDONLY);21     if(fdr == -1)22         err_exit(strerror(errno));23     int fdw = open(argv[2],O_CREAT | O_EXCL | O_RDONLY | O_RDWR,0666);24     if(fdw == -1)25         err_exit(strerror(errno));26     int fd_out = dup(STDOUT_FILENO);//保存标准输出文件描述符27     int fd_in = dup(STDIN_FILENO);28 29     dup2(fdw,STDOUT_FILENO);30     dup2(fdr,STDIN_FILENO);31 32     int data;33     while((data = http://www.mamicode.com/getc(stdin)) != EOF)34     {35         putc(data,stdout);36     }37 38        //printf("Hello Hjj\n");//这句将写入文件中39     fflush(stdout);40     close(fdr);41     close(fdw);42     dup2(fd_out,STDOUT_FILENO);//恢复标准输出43     dup2(fd_in,STDIN_FILENO);44     printf("Hello Hjj\n");45     return 0;46 }