本文主要是介绍重定向,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
重定向原理
#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咯
这篇关于重定向的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!