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 = 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 }

 

 

 

Linux编程 ---- dup函数,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。