了解重定向
首先我们关闭文件描述符1,看下面代码:
#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);
return 0;
}
此时我们发现,本应该输出在显示器上的内容竟然输出到了文件myfile 中,并显示fd=1,这种现象我们称为重定向。
所以 重定向的本质是 通过改变文件描述符(文件指针)指向的对象,从而改变输出方向
重定向的类型
1、> 输出重定向
具体操作:关闭fd[1],紧接着创建一个新文件(O_WRONLY | O_CREAT),则新文件被分配的文件描述符fd=1,此时就完成了输出重定向。
2、>> 追加重定向
具体操作:关闭fd[1],紧接着打开要追加文件(O_WRONLY | O_APPEND),此时就完成了追加重定向。
3、< 输入重定向
具体操作:关闭fd[0],再打开一个新文件,即可以通过该文件将内容写到显示器上。
dup2 系统调用
dup2 主要用于强制重定向,将fd[1] 即标准输出中的内容定向到指定位置。
函数原型如下:
#include <unistd.h>
int dup2(int oldfd,int newfd);
用法:这里newfd 一定是1
dup2(fd,1)
等效于: close (oldfd); fcntl(oldfd,F_DUPFD,newfd);
这里newfd拷贝了oldfd的指针地址,所以二者共享同一文件表项,且内容是oldfd指向的文件表。
文件重定向的内容博主就讲到这里啦,有瑕疵的地方大家可以留言哦~