dup/dup2/dup3(输入文件描述符重定向)

时间:2021-06-06 21:59:31

一、dup 系列函数的功能

对输入文件描述符重定向。
dup参数越多,功能越齐全,要求也越细。

二、dup的基本结构

dup/dup2/dup3(输入文件描述符重定向)
dup/dup2/dup3(输入文件描述符重定向)
dup/dup2/dup3(输入文件描述符重定向)

三、dup的代码实现

Makefile文件:
  1 dup : dup.c                                                                 
  2     gcc  -o $@ $^
  3 .PHONY:clean
  4 clean:
  5     rm -f dup log
  1 #include<unistd.h> 
  2 #include<stdio.h>
  3 #include<sys/types.h>
  4 #include<fcntl.h>
  5 #include<string.h>
  6 
  7 int main()
  8 {               
  9     int fd = open("./log", O_CREAT|O_RDWR , 0666);
 10     if( fd < 0 )
 11     {
 12         perror("open!");
 13         return 1;
 14     }
 15     close(1);//关闭想要重定向的fd(最小fd)
 16     int new_fd = dup(fd);//重定向标准输出到打开文件(fd)
 17     if( new_fd == -1 )
 18     {
 19         perror("dup!");
 20         return 2;
 21     }
 22     close(fd);
 23     char buf[1024];
 24     while(1)
 25     {
 26         memset(buf , '\0' , sizeof(buf)-1);
 27         fgets(buf , sizeof(buf) , stdin);
 28         if(strncmp("quit" , buf , 4) == 0)
 29         {
 30             break;
 31         }
 32         printf("%s",buf);//直接打印到标准输出,即可写入文件
 33         fflush(stdout);
 34     }
 35     close(new_fd);
 36     return 0;
 37 }          

四、结果展示

dup/dup2/dup3(输入文件描述符重定向)