首页 > 代码库 > 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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。