1.利用文件描述符规则实现重定向
文件描述的分配规则:最小没有使用的下标会分给最新打开的文件
正常printf打印是在stdin标准输出显示器打印,stdin标准输出显示器的fd是1。
所以只要把显示器文件stdin给关闭,再打开一个文件,这个文件的 fd根据规则就会是1。
但是在上层,printf打印只会向fd为1的文件的缓冲区打印,这样就完成了狸猫换太子。
把log.txt的文件描述符打印到log.txt中。
  #include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<stdio.h>int main(){close(1);int fd =  open("log.txt",O_CREAT|O_TRUNC|O_WRONLY,0666);printf("fd:%d\n",fd);                                                                                           return 0;                                                                                              }                   运行结果
2.利用dup2实现重定向


新文件fd将变成老文件fd的拷贝,就是把stdin,用log.txt给覆盖了。
#include<unistd.h>2 #include<fcntl.h>3 #include<sys/types.h>4 #include<sys/stat.h>5 #include<stdio.h>6 #include<unistd.h>7 8 9 int main()10 {1116   int fd =  open("log.txt",O_CREAT|O_TRUNC|O_WRONLY,0666);\17   dup2(fd,1);                                                                                                         18   printf("fd:%d\n",fd);19   return 0;20 }
运行结果
