码迷,mamicode.com
首页 > 系统相关 > 详细

Linux编程 ---- dup函数

时间:2014-07-21 10:05:22      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   strong   os   文件   

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函数,布布扣,bubuko.com

Linux编程 ---- dup函数

标签:style   blog   color   strong   os   文件   

原文地址:http://www.cnblogs.com/lighthjj/p/3856068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!