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 {
11
16 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 }
运行结果