重定向原理
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main()
{
close(1);
int fd = open("myfile", O_WRONLY|O_CREAT, 00644);
if(fd < 0){
perror("open");
return 1;
}
printf("fd: %d\n", fd);
fflush(stdout);
close(fd);
exit(0);
}
我们发现,本来应该输出到显示器上的内容,输出到了文件 myfile 当中,其中,fd=1。这种现象叫做输出重定向
为啥会这样呢?
当你把1号关闭,那么新打开的文件的描述符是1了,而不是3了
dup2系统调用
可以利用dup2来完成重定向
1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <unistd.h>
5 #include <fcntl.h>
6 int main()
7 {
8 int fd = open("myfile", O_CREAT | O_WRONLY|O_TRUNC,0666);
9 if (fd < 0)
10 {
11 perror("open");
12 return 1;
13 }
14 dup2(fd, 1);
15 close(fd);
16 printf("hello myfile\n");
17 return 0;
18 }
运行一下,发现没在屏幕上,在文件中
stdout和stderr的区别
它们都是显示器文件,一个是1号,一个是2号,有什么区别呢?
stdout是标准输出,stderr是标准错误
1 #include<stdio.h>
2 #include<unistd.h>
3
4 int main()
5 {
6 printf("hello stdout\n");
7 fprintf(stderr,"hello stderr\n");
8 return 0;
9 }
正常运行
输出重定向
假如我们要把常规信息放在一个文件,错误信息放一个文件,怎么做?
假如把所有信息都放在一个文件里呢?
总的来说,stdout是打印常规信息,stderr是打印错误信息,都是向显示器打印,只是信息不同,和文件描述符不同。当我们要错误信息是就用stderr咯